2012-09-24 32 views
17

Tôi vừa nâng cấp Monotouch lên 6 và bây giờ ứng dụng của tôi sẽ không bắt đầu. Nó đã được làm việc trước đây mà không có bất kỳ vấn đề. Bây giờ nó ném một ngoại lệ (được liệt kê dưới đây) trong tập tin Main.cs. Tôi đã xem qua các mẹo khắc phục sự cố trên Xamarin, nhưng nó không giải quyết được vấn đề. Tôi đã sắp xếp lại tệp nib, xóa và định cấu hình lại các cửa hàng của mình và tạo một ngòi ngách hoàn toàn mới để xem liệu điều đó có khắc phục được sự cố không. Có ai khác có suy nghĩ gì không?Not Key Value Coding Compliant (Monotouch và iOS 6)

MonoTouch.Foundation.MonoTouchException: Objective-C exception thrown. Name: NSUnknownKeyException Reason: [<UIApplication 0xc84bb10> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key btnNewAccount. 
    at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr) 
    at MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0004c] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38 
    at Pokr.Application.Main (System.String[] args) [0x00000] in /Users/James/Projects/App/Main.cs:17 

Mã từ LoginView.designer.cs:

[Register ("LoginView")] 
partial class LoginView 
{ 
    [Outlet] 
    MonoTouch.UIKit.UIImageView imgLogo { get; set; } 

    [Outlet] 
    MonoTouch.UIKit.UITextField txtEmail { get; set; } 

    [Outlet] 
    MonoTouch.UIKit.UITextField txtPassword { get; set; } 

    [Outlet] 
    MonoTouch.UIKit.UIButton btnLogin { get; set; } 

    [Outlet] 
    MonoTouch.UIKit.UIButton btnNewAccount { get; set; } 

    [Outlet] 
    MonoTouch.UIKit.UILabel lblSecurityNotice { get; set; } 

    [Outlet] 
    MonoTouch.UIKit.UIImageView imgKeyboardBorder { get; set; } 

    void ReleaseDesignerOutlets() 
    { 
     if (imgLogo != null) { 
      imgLogo.Dispose(); 
      imgLogo = null; 
     } 

     if (txtEmail != null) { 
      txtEmail.Dispose(); 
      txtEmail = null; 
     } 

     if (txtPassword != null) { 
      txtPassword.Dispose(); 
      txtPassword = null; 
     } 

     if (btnLogin != null) { 
      btnLogin.Dispose(); 
      btnLogin = null; 
     } 

     if (btnNewAccount != null) { 
      btnNewAccount.Dispose(); 
      btnNewAccount = null; 
     } 

     if (lblSecurityNotice != null) { 
      lblSecurityNotice.Dispose(); 
      lblSecurityNotice = null; 
     } 

     if (imgKeyboardBorder != null) { 
      imgKeyboardBorder.Dispose(); 
      imgKeyboardBorder = null; 
     } 
    } 

Mã từ Main.cs (nơi nghỉ code):

static void Main (string[] args) 
    { 
     UIApplication.Main (args, null, "AppDelegate"); 
    } 

Dưới đây là đoạn mã từ appdelegate của tôi ở đâu Tôi gọi cho ViewController:

 var rootNavigationController = new UINavigationController(); 

     LoginView loginScreen = new LoginView(); 
     rootNavigationController.PushViewController(loginScreen, false); 

     this.window.RootViewController = rootNavigationController; 

     //blank function fires so the getter will init the singleton. 
     Singleton.Instance.Initialize(); 

     // make the window visible 
     window.MakeKeyAndVisible(); 


     return true; 
+0

Cần thêm mã nếu có thể. – fuzz

+0

Đã thêm một số mã cho, đó chỉ là mã do nhà thiết kế tạo ra. Tuy nhiên, nó sẽ cung cấp cho bạn một ý tưởng về những gì nhà thiết kế đang đồng bộ hóa. Như tôi đã nói, nó hoạt động trước khi nâng cấp. Vì vậy, tôi tò mò nếu đó là một lỗi Monotouch/phát triển. – jamesbar2

Trả lời

18

Lỗi này xảy ra khi bạn đã khởi tạo mã số ViewController nhưng cũng đã khởi tạo ViewController từ tệp XIB.

Điều này có thể xảy ra nếu bạn có giá trị "Giao diện chính" được đặt thành ViewController bạn đang tạo mã. Để giải quyết vấn đề này, làm cho giá trị này trống, sau đó không có ViewController sẽ được khởi chạy tự động.

Đồng thời kiểm tra tệp pInfo của bạn để xem có bộ giao diện chính không.

Nhờ @Bart cho việc cung cấp mẹo này cho Xamarin người dùng:

dự án Nhấp chuột phải vào Xamarin Studio (v.4) chọn 'Options' và sau đó dưới 'iOS Project' (phần 'iPad Deployment info'). Hãy xóa phần thả xuống 'Main Interface' và điều đó sẽ giải quyết được vấn đề.

+2

Điều này đã sửa nó! Cảm ơn nhiều. Đó là trong cài đặt ứng dụng của tôi đã xác định một giao diện chính. – jamesbar2

+2

Cảm ơn! Tương tự ở đây: nhấp chuột phải vào dự án Xamarin Studio (v.4) chọn 'Tùy chọn' và sau đó trong 'Dự án iOS' (phần 'Thông tin triển khai iPad') Tôi phải xóa phần 'Giao diện chính' thả xuống và giải quyết nó. – Bart

3

Nó cho bạn biết lý do: [<UIApplication 0xc84bb10> setValue:forUndefinedKey:]. Lưu ý rằng nó không nói: [<LoginView 0xc84bb10> setValue:forUndefinedKey:]. Bây giờ bạn cần phải tìm ra những gì đang cố gắng để gửi tin nhắn -setBtnNewAccount: đến một thể hiện của UIApplication.

Có vẻ như một đại biểu được đặt sai ở đâu đó.

+0

Hmm. Tôi không chắc chắn làm thế nào các đại biểu được thiết lập sai kể từ khi được chỉ định bởi các nhà thiết kế/mono phát triển. Tôi nhận thấy rằng mặc dù, và đang nhầm lẫn lý do tại sao nó trong thư mục gốc của ứng dụng và không phải trong bộ điều khiển. Có lẽ một cái gì đó đã thay đổi trong cách iOS 6 gọi chức năng? – jamesbar2

2

Tôi gặp sự cố tương tự với việc tạo cửa hàng từ các nút, do đó xóa các cửa hàng đó và tạo các cửa hàng từ họ. Một nơi nào đó sự đồng bộ giữa XCode và Xamarin không hoàn toàn được thực hiện một cách chính xác ...

Khắc phục cho tôi là xóa các nút, sau đó tìm kiếm và xóa tất cả các tham chiếu trong các tệp thiết kế theo cách thủ công.

Hy vọng điều này sẽ giúp ...

1

Tôi gặp phải sự cố này ngay cả trong lần xây dựng Xamarin Studio gần đây (5.9.5). Tùy chọn "Đồng bộ hóa với Xcode" đã chuyển sang màu xám nhưng rõ ràng tệp ViewController xib của tôi ở Tamarin không đồng bộ với Xcode.

Cách khắc phục giống như đã đề cập bởi Hutjepower. Tôi đã tìm kiếm tài liệu tham khảo bị hỏng trong Xamarin Studio, mở tệp xib trong Xamarin (nhấp chuột phải vào tệp và sử dụng Trình chỉnh sửa mã nguồn) và sau đó xóa các điều khiển mà tôi đã xóa thông qua Xcode. Điều đó đã khắc phục vấn đề này.

1

Tôi cũng gặp vấn đề này với Xamarin Studio 5.10.1; Cuối cùng tôi đã phát hiện ra rằng nếu tôi đã sử dụng trình chỉnh sửa văn bản để chỉnh sửa tệp bảng phân cảnh và xóa mọi thứ trong số

<connections></connections> 

nó đã khắc phục sự cố cho tôi.

Các vấn đề liên quan