这个类不符合键值编码规范,无法处理视图键。

55

我对Xcode非常陌生,我制作了一个简单的应用程序(简易计算器),在模拟器和设备上运行得很好。但当我在Target摘要(summary)选项中设置主界面时,在启动模拟器时会出现以下错误:

2012-04-14 12:17:27.123 CalcTest[27550:f803] * Terminating app due to uncaught exception 'NSUnknownKeyException',

reason: '[<UIApplication 0x6a14650> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key calculatorScreen.'

* First throw call stack: (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) terminate called throwing an exception(lldb)

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

在模拟器上运行空项目-->正常工作,

但是当我在Target摘要(summary)中将主界面设置为ViewController时,模拟器就会崩溃并出现以下错误:

2012-04-14 12:11:17.492 crash[27494:f803] * Terminating app due to uncaught exception 'NSUnknownKeyException', reason:

'[<UIApplication 0x6a6f4b0> setValue:forUndefinedKey:]: 此类不符合键值编码规范,无法设置key:view * 首次抛出调用堆栈:

(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) 终止调用并抛出异常。

这个问题有解决方案吗?


2
当我之前遇到这种情况时,是因为 nib 文件仍然链接着我已经删除或重命名的 IBOutlet 或 IBAction。不确定这是否对此情况有帮助。 - GregularExpressions
7个回答

94

如果您在您的nib (xib文件)中有一个与视图控制器中的属性(IBOutlet)或方法(IBAction)相关联的控件,并且您已经删除或重命名了该属性或方法,运行时无法找到它并因此崩溃。

在您的情况下,您将项目的“Main Interface”属性设置为ViewController.nib。这是一个问题,因为唯一应该用作“Main Interface”的nib应该包含UIWindows,并且该nib中的File Owner应该设置为AppDelegate。该nib中的UIWindow应该与File Owner的(AppDelegate) window属性相关联。因为您使用了一个不具备运行时所需特性的nib,所以会出现此错误。

解决方案是将“Main Interface”留空,因为您不必再手动设置UIWindows。


解决这个问题的方法是在你的nib中取消链接。 - Joseph DeCarlo
好的,让我试着重现你的问题。 - Joseph DeCarlo
当你在问题中说:“在摘要中将主界面(设置为ViewController)”,你的意思是什么? - Joseph DeCarlo
5
明白了,你不需要设置那个。只需将其保留为空白,在ViewController.h/.m/.xib中放置你的代码即可,然后你就可以开始了。 - Joseph DeCarlo
要非常清楚,如果您将主界面设置为nib名称,则该nib需要在其中有一个UIWindow,并且nib中的File Owner需要设置为AppDelegate,并且UIWindow需要链接到AppDelegate的window属性,但是您不再需要手动执行此操作。 - Joseph DeCarlo
显示剩余3条评论

12

我曾遇到同样的问题,并通过在xib文件中使用右控制键单击控件来查看引用输出来解决它。结果发现,一些控件仍然引用了旧名称,导致此错误发生。


6
如果您收到类似以下信息的消息:
  • 由于未捕获的异常“NSUnknownKeyException”,原因:

'[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key

请点击 BreakPoint 导航区域左下角的添加 (+) 按钮,选择“添加异常断点”,因为它崩溃是由于“NSUnknownKeyException”,并选择“全部”。运行程序。程序将在第一个异常处停止。

5

请尝试以下步骤:选择“文件所有者”,然后点击“连接检查器”(在右侧窗格的顶部),您将看到所有输出口。查找任何类似于这个符号的标志(!),您将在指示缺失输出口的小圆圈上找到它,您需要正确链接或删除输出口。


4
尝试这个:
前往Target => Build Phases => Compile Sources,
然后包括 'calculatorScreen.m'。

1
删除 ViewController.m 文件,然后再次添加。 - SINDHYA PETER

2

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


1

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接