对于关键视图,此类不符合键值编码

时间:2012-04-14 10:27:48

标签: iphone objective-c ios xcode

我对xcode很新...一个应用程序(简单的计算器)工作非常好(在模拟器和设备上)。 当我在目标摘要选项中设置主界面时,启动模拟器时出现以下错误:

  

2012-04-14 12:17:27.123 CalcTest [27550:f803] * 终止app到期   未捕获的异常'NSUnknownKeyException',

     

原因:   '[<UIApplication 0x6a14650> setValue:forUndefinedKey:]:这门课是   密钥计算器屏幕不符合密钥值编码。'

     

* 第一次抛出调用堆栈:(0x12db022 0x18f8cd6 0x12daee1 0xcc2022 0xc33f6b 0xc33edb 0xc4ed50 0x53671a 0x12dcdea 0x12467f1 0x53526e   0x536eb7 0x313ce1 0x313ff8 0x31317f 0x322183 0x322c38 0x316634   0x27fcef5 0x12af195 0x1213ff2 0x12128da 0x1211d84 0x1211c9b 0x312c65   0x314626 0x1bad 0x1b15 0x1)终止调用throw   异常(LLDB)

为了找到问题,我开始了一个新的基于视图的项目。

在模拟器上运行空的新项目 - &gt;工作,

但是当我将主界面设置为ViewController时,在摘要 - &gt;模拟器崩溃

  

2012-04-14 12:11:17.492崩溃[27494:f803] * 由于未被捕获而终止应用   异常'NSUnknownKeyException',原因:

     

'[<UIApplication 0x6a6f4b0> setValue:forUndefinedKey:]:这门课是   关键视图不符合关键值编码。        * 第一次抛出调用堆栈:

     

(0x13c7022 0x1558cd6 0x13c6ee1 0x9bf022 0x930f6b 0x930edb 0x94bd50   0x23371a 0x13c8dea 0x13327f1 0x23226e 0x233eb7 0x10ce1 0x10ff8 0x1017f   0x1f183 0x1fc38 0x13634 0x12b1ef5 0x139b195 0x12ffff2 0x12fe8da   0x12fdd84 0x12fdc9b 0xfc65 0x11626 0x1d4d 0x1cb5)终止调用   抛出异常

是否有解决问题的方法?

7 个答案:

答案 0 :(得分:91)

如果您的nib(xib文件)中的控件链接到视图控制器中的属性(IBOutlet)或方法(IBAction),并且您已删除或重命名了属性或方法,则运行时可以'找到它,因为它已被重命名,因此崩溃。

在您的情况下,您已将项目的Main Interface属性设置为ViewController.nib。这是一个问题,因为唯一应该用作主界面的笔尖应该包含UIWindows,并且该笔尖中的文件所有者应该设置为AppDelegate。应该将nib中的UIWindow链接到文件所有者(AppDelegate)窗口属性。因为您使用nib设置了没有运行时所需的特征,所以它会给您带来这个错误。

解决方法是将主界面留空,因为您不必再​​手动设置UIWindows。

答案 1 :(得分:12)

刚出现同样的问题并通过右侧的Control-Clicking控件中的控件来修复它,以查看引用Outlets。事实证明,一些控件仍在引用,而且名称较旧并导致此错误发生。

答案 2 :(得分:6)

如果您收到类似的消息:

  • 由于未捕获的异常'NSUnknownKeyException'而终止应用,原因是:

'[setValue:forUndefinedKey:]:此类不是密钥值编码兼容的密钥

单击BreakPoint导航区域左下角的添加(+),选择“添加异常断点”,因为它因“NSUnknownKeyException”而崩溃,并选择“全部”。运行程序。程序在第一个例外时停止。

答案 3 :(得分:5)

试试这个,选择文件所有者然后点击&#34;连接检查器&#34; (右窗格顶部的上方),您将看到所有插座。找到这样的任何标志(!)你会在小圆圈上找到它,表示缺少插座,所有你需要做的就是正确连接或取下插座。

答案 4 :(得分:4)

试试这个,

转到目标=&gt;构建阶段=&gt;编译源

然后加上'calculatorScreen.m'

答案 5 :(得分:2)

我遇到了同样的问题。在我的情况下,我已在.h文件中重命名了文本标签。所以在我的main.storyboard文件中有该标签的多个引用。一旦我删除了旧的引用,我的代码就开始工作了。

答案 6 :(得分:1)

请检查您的目标会员资格 选择第一个选项。这可能对其他人有帮助