2012-09-24 13 views
17

Ho appena aggiornato il mio Monotouch a 6 e ora la mia app non verrà avviata. Funzionava in precedenza senza problemi. Ora lancia un'eccezione (elencata sotto) nel file Main.cs. Ho esaminato i suggerimenti per la risoluzione dei problemi su Xamarin, ma non ha risolto il problema. Ho riposizionato il file del pennino, rimosso e riconfigurato i miei punti vendita e ho creato un pennino completamente nuovo per vedere se questo avrebbe risolto il problema. Qualcun altro ha qualche pensiero?Non codifica valore chiave compatibile (Monotouch e 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 

codice dalle 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; 
     } 
    } 

Codice da Main.cs (dove il codice pause):

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

Ecco il frammento dal mio AppDelegate dove Chiamo 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

Se necessario, è necessario più codice. – fuzz

+0

Aggiunto un po 'di codice per, è solo il codice generato dal designer. Ma dovrebbe darti un'idea di ciò che il designer sta sincronizzando. Come ho detto, ha funzionato prima dell'aggiornamento. Quindi, sono curioso di sapere se si tratta di un monoteuch/sviluppo bug. – jamesbar2

risposta

18

Questo errore si verifica quando si inizializza un codice ViewController ma si ha anche il ViewController inizializzato da un file XIB.

Questo potrebbe accadere se si ha il valore "Interfaccia principale" impostato su ViewController che si sta creando nel codice. Per risolvere questo problema, rendere questo valore vuoto, quindi nessun ViewController verrà inizializzato automaticamente.

Controllare anche il file pInfo per verificare se è presente un set di Interfaccia principale.

Grazie alla @Bart per fornire questo suggerimento per Xamarin utenti:

progetto pulsante destro del mouse in Xamarin Studio (v.4) Selezionare 'Options' e poi sotto 'iOS Project' (sezione 'iPad Deployment info'). Cancellare il menu a discesa 'Main Interface' e questo dovrebbe risolvere il problema.

+2

Questo problema è stato risolto! Grazie mille. Era nelle impostazioni dell'applicazione che aveva definito un'interfaccia principale. – jamesbar2

+2

Grazie! Lo stesso qui: clic con il tasto destro del mouse su Xamarin Studio (v.4) selezionare 'Opzioni' e quindi sotto 'Progetto iOS' (sezione 'Informazioni sulla distribuzione di iPad') Ho dovuto cancellare il menu 'Interfaccia principale' e l'ho risolto. – Bart

3

Ti sta dicendo il motivo: [<UIApplication 0xc84bb10> setValue:forUndefinedKey:]. Si noti che non sta dicendo: [<LoginView 0xc84bb10> setValue:forUndefinedKey:]. Ora è necessario capire che cosa sta cercando di inviare il messaggio -setBtnNewAccount: a un'istanza di UIApplicazione.

Sembra che un delegato sia impostato errato da qualche parte.

+0

Hmm. Non sono sicuro di come il delegato sia impostato in modo errato da quando è stato assegnato dal designer/mono. Lo noto però e sono confuso perché è nella radice dell'app e non nel controller. Forse qualcosa è cambiato in come le chiamate di iOS 6 funzionano? – jamesbar2

2

Ho avuto problemi simili con la creazione di punti vendita da pulsanti, rimuovendo così quelli e creando punti vendita da loro. Da qualche parte la sincronizzazione tra XCode e Xamarin non è stata completamente eseguita in modo corretto ...

Il problema per me era rimuovere i pulsanti, seguito dalla ricerca e dalla rimozione manuale di tutti i riferimenti nei file del designer.

Spero che questo aiuti ...

1

Ho affrontato questo tema anche con in una recente build di Xamarin Studio (5.9.5). L'opzione "Sincronizza con Xcode" era disattivata, ma evidentemente il mio file xib ViewController in Tamarin non era sincronizzato con Xcode.

La correzione era la stessa indicata da Hutjepower. Ho cercato il riferimento interrotto all'interno di Xamarin Studio, ho aperto il file xib all'interno di Xamarin (clic destro sul file e uso un editor di codice sorgente) e ho rimosso i controlli che avevo rimosso tramite Xcode. Questo ha risolto questo problema.

1

Ho riscontrato questo problema anche con Xamarin Studio 5.10.1; Alla fine ho scoperto che se ho usato un editor di testo per modificare il mio file di storyboard e rimosso tutto nel

<connections></connections> 

è risolto il problema per me.

Problemi correlati