2012-09-24 11 views
17

Ich habe gerade mein Monotouch auf 6 aktualisiert und jetzt startet meine App nicht. Es funktionierte früher ohne irgendwelche Probleme. Jetzt wird eine Ausnahme (unten aufgeführt) in der Datei Main.cs ausgelöst. Ich habe die Tipps zur Fehlerbehebung für Xamarin durchgesehen, das Problem wurde jedoch nicht behoben. Ich habe die Nib-Datei neu angeordnet, meine Steckdosen entfernt und neu konfiguriert und eine neue Feder erstellt, um zu sehen, ob das das Problem beheben würde. Hat jemand sonst irgendwelche Gedanken?Kodierung nicht kompatibel (Monotouch und 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 

-Code aus der 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; 
     } 
    } 

-Code von Main.cs (wo die Code Pausen):

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

Hier ist der Ausschnitt aus meinem AppDelegate wo Ich rufe den 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

Benötigen Sie mehr Code, wenn möglich. – fuzz

+0

Hinzugefügt Code für, es ist nur der Designer generierte Code. Aber es sollte Ihnen eine Vorstellung davon geben, was der Designer synchronisiert. Wie gesagt, es funktionierte vor dem Upgrade. Also, ich bin neugierig, ob es ein Monotouch/Entwicklung Bug ist. – jamesbar2

Antwort

18

Dieser Fehler tritt auf, wenn Sie eine ViewController im Code initialisiert haben, aber auch die ViewController initialisiert von einer XIB-Datei haben.

Dies könnte passieren, wenn Sie den Wert "Main Interface" auf ViewController setzen, den Sie in Code erstellen. Um dieses Problem zu beheben, machen Sie diesen Wert leer. Dann wird ViewController nicht automatisch initialisiert.

Überprüfen Sie auch Ihre pInfo-Datei, um zu sehen, ob es eine Hauptschnittstelle gibt.

Dank @Bart für die Bereitstellung dieses Tipps für Xamarin Benutzer:

Rechtsklick Projekt in Xamarin Studio (v.4) 'Options' wählt und dann unter 'iOS Project' (Abschnitt 'iPad Deployment info'). Löschen Sie das Drop-down-Menü 'Main Interface' und das sollte das Problem lösen.

+2

Das hat es behoben! Vielen Dank. Es hatte in meinen Anwendungseinstellungen eine Hauptschnittstelle definiert. – jamesbar2

+2

Danke! Gleiches hier: Klicken Sie mit der rechten Maustaste auf das Projekt in Xamarin Studio (v.4), wählen Sie 'Optionen' und dann unter 'iOS Project' (Abschnitt 'iPad Deployment Info') musste ich das Dropdown 'Main Interface' löschen und das löste es. – Bart

3

Es sagt Ihnen den Grund: [<UIApplication 0xc84bb10> setValue:forUndefinedKey:]. Beachten Sie, dass es nicht sagt: [<LoginView 0xc84bb10> setValue:forUndefinedKey:]. Jetzt müssen Sie herausfinden, was versucht, die Nachricht -setBtnNewAccount: an eine Instanz von UIApplication zu senden.

Es sieht aus wie ein Delegat irgendwo falsch eingestellt ist.

+0

Hmm. Ich bin mir nicht sicher, wie der Delegierte falsch eingestellt ist, da er vom Designer/Mono entwickelt wurde. Ich merke das aber, und bin verwirrt, warum es in der Wurzel der App und nicht im Controller ist. Vielleicht hat sich etwas in der Funktionsweise von iOS 6 geändert? – jamesbar2

2

Ich hatte ähnliche Probleme mit dem Erstellen von Steckdosen von Tasten, damit diese entfernt und Erstellen von Steckdosen von ihnen. Irgendwo war die Synchronisierung zwischen XCode und Xamarin nicht vollständig auf korrekte Weise ...

Fix für mich war, die Tasten zu entfernen, gefolgt von der Suche und alle Referenzen in den Designer-Dateien manuell zu entfernen.

Hope this helps ...

1

stand ich dieses Problem auch mit in einer aktuellen Build von Xamarin Studio (5.9.5). Die Option "Sync mit Xcode" war ausgegraut, aber offensichtlich war meine ViewController XIB-Datei in Tamarin nicht synchron mit Xcode.

Die Lösung war die gleiche wie von Hutjepower erwähnt. Ich suchte nach der defekten Referenz in Xamarin Studio, öffnete die XIB-Datei in Xamarin (rechter Mausklick auf die Datei und verwende einen Quelltext-Editor) und entfernte dann die Steuerelemente, die ich über Xcode entfernt hatte. Das hat dieses Problem behoben.

1

Ich habe dieses Problem mit Xamarin Studio 5.10.1 auch; Ich entdeckte schließlich, dass, wenn ich einen Texteditor verwendet, um meine Storyboard-Datei zu bearbeiten und entfernt alles, was in der

<connections></connections> 

es das Problem für mich fixiert.