17

我刚刚将我的 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");
    }

这是我调用 ViewController 的 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;
4

5 回答 5

18

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

如果您将“主界面”值设置为ViewController您在代码中创建的值,则可能会发生这种情况。要解决此问题,请将此值设为空,然后ViewController将自动初始化 no。

还要检查您的 pInfo 文件以查看是否设置了主界面。

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

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

于 2012-09-25T04:44:20.897 回答
3

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

看起来委托在某处设置错误。

于 2012-09-25T02:02:38.030 回答
2

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

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

希望这可以帮助...

于 2014-04-30T08:28:40.787 回答
1

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

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

于 2015-08-18T16:21:54.173 回答
1

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

<connections></connections>

它为我解决了这个问题。

于 2016-01-01T15:45:22.537 回答