我刚刚将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 文件以查看是否有主界面集。
感谢@Bart为 Xamarin 用户提供此提示:
右键单击 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>
它为我解决了问题。