不符合键值编码(单点触控和 iOS 6)



我刚刚将Monotouch升级到6,现在我的应用程序无法启动。 它以前工作没有任何问题。 现在,它在 Main.cs 文件中抛出异常(如下所示)。 我已经查看了有关 Xamarin 的故障排除提示,但它没有解决问题。 我已经重新布置了笔尖文件,删除并重新配置了我的插座,并创建了一个全新的笔尖,看看是否可以解决问题。 还有人有什么想法吗?

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

来自 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;
        }
    }

来自 Main.cs 的代码(代码中断的位置):

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

以下是我调用视图控制器的应用程序代表中的片段:

        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;

当您在代码中初始化了ViewController,但也从 XIB 文件初始化了ViewController时,会发生此错误。

如果将"主界面"值设置为在代码中创建的ViewController,则可能会发生这种情况。若要解决此问题,请将此值设置为空,则不会自动初始化任何ViewController

还要检查您的 pInfo 文件以查看是否有主界面集。

感谢@BartXamarin 用户提供此提示:

右键单击 Xamarin Studio (v.4) 中的项目,选择"'Options'",然后在"'iOS Project'"(第 'iPad Deployment info' 节)下选择"。清除下拉'Main Interface',这应该可以解决问题。

它告诉你原因:[<UIApplication 0xc84bb10> setValue:forUndefinedKey:]。请注意,它不是说:[<LoginView 0xc84bb10> setValue:forUndefinedKey:]。现在,您需要弄清楚是什么尝试将消息-setBtnNewAccount:发送到UIApplication的实例。

看起来某个地方设置了代表。

我在从按钮创建插座时遇到了类似的问题,从而删除了这些插座并从中创建插座。在某个地方,XCode 和 Xamarin 之间的同步并没有以正确的方式完全完成......

对我来说,修复是删除按钮,然后手动搜索和删除设计器文件中的所有引用。

希望这有帮助...

即使在

最近的 Xamarin Studio (5.9.5) 版本中,我也遇到了这个问题。"与Xcode同步"选项显示为灰色,但显然我在Tamarin中的ViewController xib文件与Xcode不同步。

修复程序与Hutjepower提到的相同。我在 Xamarin Studio 中搜索损坏的引用,在 Xamarin 中打开 xib 文件(右键单击该文件并使用源代码编辑器),然后删除了我通过 Xcode 删除的控件。这解决了这个问题。

我在使用 Xamarin Studio 5.10.1 时也遇到了这个问题;我最终发现,如果我使用文本编辑器来编辑我的故事板文件并删除

<connections></connections>

它为我解决了问题。

最新更新