2012-09-24 13 views
17

Właśnie zaktualizowałem Monotouch do wersji 6, a teraz moja aplikacja się nie uruchomi. To działało poprzednio bez żadnych problemów. Teraz zgłasza wyjątek (wymieniony poniżej) w pliku Main.cs. Przejrzałem wskazówki dotyczące rozwiązywania problemów dotyczące Xamarin, ale to nie rozwiązało problemu. Ponownie przygotowałem plik nib, usunąłem i zrekonfigurowałem moje sklepy, i utworzyłem zupełnie nowego stalówka, aby sprawdzić, czy to rozwiąże problem. Czy ktokolwiek ma jakieś myśli?Zgodność z kluczem niezgodnym z kluczem (Monotouch i 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 

kod z 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; 
     } 
    } 

Kod z Main.cs (gdzie podziały kodu):

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

Oto urywek z mojego AppDelegate gdzie Zadzwoń do 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

Potrzebujesz więcej kodu, jeśli to możliwe. – fuzz

+0

Dodano kod, jest to tylko wygenerowany przez projektanta kod. Powinien jednak dać ci wyobrażenie o tym, co projektant synchronizuje. Jak już powiedziałem, działało to przed aktualizacją. Więc jestem ciekawy, czy to błąd Monotouch/develop. – jamesbar2

Odpowiedz

18

Ten błąd występuje po zainicjowaniu kodu w postaci ViewController, ale również w przypadku pliku XIB jest inicjowany ViewController.

Może się to zdarzyć, jeśli wartość "Główny interfejs" jest ustawiona na ViewController, którą tworzysz w kodzie. Aby rozwiązać ten problem, ustaw tę wartość jako pustą, a następnie ViewController zostanie zainicjowana automatycznie.

Sprawdź również plik pInfo, aby sprawdzić, czy istnieje zestaw Main Interface.

Dzięki @Bart za udostępnienie tej wskazówka dla Xamarin użytkowników:

prawym przyciskiem myszy projekt w Xamarin Studio (v.4) Wybierz 'Options' a następnie pod 'iOS Project' (sekcja 'iPad Deployment info'). Zlikwiduj listę rozwijaną 'Main Interface', która powinna rozwiązać problem.

+2

Naprawiono to! Wielkie dzięki. To w moich ustawieniach aplikacji zdefiniowałem główny interfejs. – jamesbar2

+2

Dzięki! To samo tutaj: kliknij prawym przyciskiem myszy projekt w Xamarin Studio (v.4) wybierz "Opcje", a następnie "Projekt iOS" (sekcja "Informacje o wdrażaniu iPada") Musiałem usunąć z rozwijanego menu "Główny interfejs" i to rozwiązało. – Bart

3

Mówi ci powód: [<UIApplication 0xc84bb10> setValue:forUndefinedKey:]. Zauważ, że to nie jest powiedzenie: [<LoginView 0xc84bb10> setValue:forUndefinedKey:]. Teraz musisz dowiedzieć się, co próbuje wysłać wiadomość do instancji aplikacji UIApplication.

Wygląda na to, że delegat jest źle ustawiony gdzieś.

+0

Hmm. Nie jestem pewien, w jaki sposób delegat jest źle ustawiony, ponieważ jego przypisanie przez projektanta/mono rozwija się. Zauważyłem jednak, i jestem zdezorientowany, dlaczego jego w katalogu głównym aplikacji, a nie w kontrolerze. Może coś zmieniło się w funkcjach połączeń iOS 6? – jamesbar2

2

Miałem podobne problemy z tworzeniem gniazdek z przycisków, usuwając je i tworząc z nich ujścia. Gdzieś pomiędzy synchronizacją XCode i Xamarin nie zostały wykonane w poprawny sposób ...

Naprawiono dla mnie usunięcie przycisków, a następnie ręczne wyszukanie i usunięcie wszystkich odniesień w plikach projektantów.

Nadzieja to pomaga ...

1

I wobec tego problemu nawet w ostatniej kompilacji Xamarin Studio (5.9.5). Opcja "Synchronizuj z Xcode" była wyszarzona, ale najwyraźniej mój plik Xib ViewController w Tamarin nie był zsynchronizowany z Xcode.

Poprawka była taka sama jak wspomniana przez Hutjepower. Szukałem uszkodzonego odwołania w Xamarin Studio, otworzyłem plik XIB w Xamarin (kliknij prawym przyciskiem myszy na pliku i użyj edytora kodu źródłowego), a następnie usunąłem kontrolki, które usunąłem przez Xcode. To naprawiło ten problem.

1

Mam również ten problem z Xamarin Studio 5.10.1, jak również; I w końcu odkrył, że jeśli kiedyś edytora tekstu edytować plik storyboard i usuwa wszystko w

<connections></connections> 

to naprawili problem dla mnie.

Powiązane problemy