2012-09-24 15 views
17

Acabo de actualizar mi Monotouch a 6 y ahora mi aplicación no se iniciará. Anteriormente funcionaba sin problemas. Ahora arroja una excepción (enumerada a continuación) en el archivo Main.cs. He revisado los consejos de solución de problemas de Xamarin, pero no resolvió el problema. Volví a colocar el archivo de punta, eliminé y reconfiguré mis salidas, y creé un plumín completamente nuevo para ver si eso solucionaría el problema. ¿Alguien más tiene alguna idea?No cumple con la codificación de valor de clave (Monotouch y 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 

Código de los 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; 
     } 
    } 

Código de Main.cs (dónde están los saltos de código):

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

Aquí está el fragmento de mi AppDelegate donde Llamo al 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

Necesita más código si es posible. – fuzz

+0

Agregó un código para, es solo el código generado por el diseñador. Pero, debe darle una idea de lo que el diseñador está sincronizando. Como dije, funcionó antes de la actualización. Entonces, tengo curiosidad si es un error Monotouch/develop. – jamesbar2

Respuesta

18

Este error se produce cuando ha inicializado un ViewController en el código pero también tiene el ViewController inicializado desde un archivo XIB.

Esto podría suceder si tiene el valor "Interfaz principal" configurado en ViewController que está creando en el código. Para resolver este problema, haga que este valor esté vacío, entonces no se inicializará automáticamente ViewController.

También verifique su archivo pInfo para ver si hay un conjunto de Interfaz principal.

Gracias a @Bart para la prestación de este consejo para Xamarin usuarios:

proyecto Haga clic en Xamarin Studio (v.4) 'Options' seleccionar y luego bajo 'iOS Project' (sección 'iPad Deployment info'). Borre el menú desplegable 'Main Interface' y eso debería resolver el problema.

+2

Esto lo arregló! Gracias un montón. Fue en la configuración de mi aplicación que se definió una interfaz principal. – jamesbar2

+2

Gracias! Lo mismo aquí: haga clic con el botón derecho del ratón en Xamarin Studio (v.4), seleccione 'Opciones' y luego en 'Proyecto iOS' (sección 'Información de implementación del iPad'). Tenía que borrar la 'Interfaz principal' desplegable y eso lo resolvió. – Bart

3

Te está diciendo la razón: [<UIApplication 0xc84bb10> setValue:forUndefinedKey:]. Observe que no está diciendo: [<LoginView 0xc84bb10> setValue:forUndefinedKey:]. Ahora necesita averiguar qué está intentando enviar el mensaje -setBtnNewAccount: a una instancia de UIApplication.

Parece que un delegado está configurado incorrectamente en alguna parte.

+0

Hmm. No estoy seguro de cómo el delegado está equivocado ya que es asignado por el diseñador/mono. Me doy cuenta de eso, y estoy confundido por qué está en la raíz de la aplicación y no en el controlador. Tal vez algo ha cambiado en la forma en que iOS 6 llama a las funciones? – jamesbar2

2

Tuve problemas similares con la creación de salidas de los botones, eliminándolos y creando salidas de ellos. En algún lugar, la sincronización entre XCode y Xamarin no se realizó por completo de manera correcta ...

La solución para mí fue eliminar los botones, y luego buscar y eliminar todas las referencias en los archivos del diseñador manualmente.

Espero que esto ayude ...

1

que enfrenta este problema incluso con la acumulación en un reciente estudio de Xamarin (5.9.5). La opción "Sincronizar con Xcode" estaba atenuada, pero evidentemente mi archivo ViewController xib en Tamarin no estaba sincronizado con Xcode.

La solución era la misma que mencionó Hutjepower. Busqué la referencia interrumpida dentro de Xamarin Studio, abrí el archivo xib dentro de Xamarin (clic derecho sobre el archivo y uso un Editor de Código Fuente) y luego eliminé los controles que había eliminado a través de Xcode. Eso solucionó este problema.

1

He estado teniendo este problema con Xamarin Studio 5.10.1 también; Finalmente he descubierto que si he utilizado un editor de texto para editar mi archivo de guión gráfico y quité todo en el

<connections></connections> 

se solucionó el problema para mí.

Cuestiones relacionadas