我试图将UILabel与在类中创建的IBOutlet链接起来。

我的应用程序崩溃与以下错误。

这是什么意思?

我该怎么解决呢?

***终止应用由于未捕获异常'NSUnknownKeyException',原因:'[<UIViewController 0x6e36ae0> setValue:forUndefinedKey:]:这个类不是键值编码兼容的键XXX。'


当前回答

在我的例子中,这是因为引用了错误的Nib:

BMTester *viewController = [[BMTester alloc] initWithNibName:@"WrongNibName" bundle:nil];

其他回答

对我来说。合并后,xib文件中没有丢失的输出。

Shift + Command + K

解决了我的问题。我清理了我的项目并重建。

我犯了同样的错误,只是形式略有不同:

在接口构建器中,我有一个自定义子控制器的导航控制器。这个类的名称设置正确,但是NIB名称(选择子控制器,转到属性检查器)被设置为错误的文件(基本上是一个不同的目标)。将其重置为正确的文件名解决了这个问题。

当我试图实现一个表的自定义ViewCell时,我有这个错误。当我突出显示XIB的视图控制器并连接到CellView中的元素时,会导致错误“这个类不是键值编码兼容的键”,一旦我删除了这些,它就摆脱了错误。

删除下图中的连接。

只要确保你只有与表格视图单元格的连接。要检查,单击表视图单元格,并在检查器中寻找您的连接。

通过在Storyboard/xib接口中选择有问题的对象并打开连接检查器(视图->Utilities->显示连接检查器)来检查是否有丢失的引用出口。如果您确实删除了不需要的连接,您应该可以继续。

我发现的另一个“不兼容”问题是当我出于某种原因设法拥有两个类副本时。

我给错误的副本加了密钥。Interface Builder仍然看到键,并让我连接到它们,但在运行时,它正在使用没有新键的类的另一个副本。

为了找到“正确”的副本,我使用XCode的cmd-点击类名跳转到正确的副本,然后我杀死了不好的未使用的副本(先从未使用的副本中带来我的编辑)。

这个故事的寓意:重复的类文件是不好的。