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

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

这是什么意思?

我该怎么解决呢?

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


当前回答

我不得不从模拟器/iPhone中删除应用程序来消除这个错误。

其他回答

我因为不同的原因遇到了同样的问题:我使用主故事板作为启动屏幕文件。我猜如果你使用一个故事板作为启动屏幕文件,它不应该连接到视图控制器,因为它还没有被加载。

同样的问题。我的解决方案是在Main storyboard下拉菜单中放置正确的storyboard值。我重新命名了mainstoryboard。故事板,但不重置部署信息。

你的xib可能连接不好。

这个错误我犯过很多次了。虽然TechZen的答案在这种情况下是绝对正确的,但另一个常见的原因是当您更改.h/中的IBOutlet属性的名称时。m,你已经连接到文件的所有者在nib。

从你的笔尖:

在IB中选择对象,然后转到“连接检查器”。 在“引用Outlets”下,确保你的对象没有仍然连接到旧的属性名…如果是,单击小的“x”删除引用并重新构建。

另一个常见的原因是,如果你使用Storyboard,你的UIButton可能有多个赋值(解决方案几乎与nib相同):

打开你的故事板,右击UIButton 您将看到该按钮有多个assign/ref。 删除一个带有小“x”的灰色“Main…”窗口:

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

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

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

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

我从头文件中删除了该属性。我找不到它的任何引用,但调试错误仍然引用它。我发现nib文件仍然有对它的引用。我删除了引用它的块,一切都修复了。

在Project Navigator中,

找到Nib (xib)文件。右键单击并查看源。我删除了下面的完整部分

<object class="IBConnectionRecord">
    <object class="IBCocoaTouchOutletConnection" key="connection">
        <string key="label">DeleteLabel</string>
        <reference key="source" ref="372490531"/>
        <reference key="destination" ref="774585933"/>
    </object>
    <int key="connectionID">20</int>
</object>