我试图将UILabel与在类中创建的IBOutlet链接起来。
我的应用程序崩溃与以下错误。
这是什么意思?
我该怎么解决呢?
***终止应用由于未捕获异常'NSUnknownKeyException',原因:'[<UIViewController 0x6e36ae0> setValue:forUndefinedKey:]:这个类不是键值编码兼容的键XXX。'
我试图将UILabel与在类中创建的IBOutlet链接起来。
我的应用程序崩溃与以下错误。
这是什么意思?
我该怎么解决呢?
***终止应用由于未捕获异常'NSUnknownKeyException',原因:'[<UIViewController 0x6e36ae0> setValue:forUndefinedKey:]:这个类不是键值编码兼容的键XXX。'
当前回答
我的麻烦的原因,是我复制了一个故事板文件(Xcode之外,如果我没有记错),然后所有视图控制器在复制的文件有相同的对象id在原始文件。补救办法是复制粘贴视图控制器,然后它们将获得一个新的object-ID。您可以在Identity Inspector中看到object-ID。
其他回答
导致这种情况的另一个原因是,您声明该属性实现为@dynamic,但类无法在父类中找到它。
我也遇到过同样的问题,虽然TechZen的答案可能确实令人惊讶,但我发现它很难适用于我的情况。
最终,我解决了这个问题,通过对象下列出的控制器(下图中突出显示)链接标签,而不是通过文件所有者。
希望这能有所帮助。
我发现的另一个“不兼容”问题是当我出于某种原因设法拥有两个类副本时。
我给错误的副本加了密钥。Interface Builder仍然看到键,并让我连接到它们,但在运行时,它正在使用没有新键的类的另一个副本。
为了找到“正确”的副本,我使用XCode的cmd-点击类名跳转到正确的副本,然后我杀死了不好的未使用的副本(先从未使用的副本中带来我的编辑)。
这个故事的寓意:重复的类文件是不好的。
当一个UI标签或其他UI元素被视图控制器类中的两个变量引用,而我删除了其中一个变量时,我也会遇到这种情况。
此错误指示已经连接的接口构建器对象在其所有者的源(文件的所有者)中被删除/重命名。
如果你看到一个感叹号,请在界面构建器中控制单击文件的所有者,你需要修复它。
在下图中,你可以看到“aRemovedView”在其右侧有一个感叹号,这是因为我删除了IBOutlet视图对象,而它已经在IB中连接。
这将给出以下错误: 终止应用程序由于未捕获异常'NSUnknownKeyException',原因:'[setValue:forUndefinedKey:]:这个类不是键值编码兼容键aRemovedView。'