Ios 如何解决“NSUnknownKeyException”。。。setValue:forUndefinedKey::…不符合键值编码

Ios 如何解决“NSUnknownKeyException”。。。setValue:forUndefinedKey::…不符合键值编码,ios,xcode,debugging,compiler-errors,Ios,Xcode,Debugging,Compiler Errors,好的,我会尽量简短地说。我想在我的键盘上方安装一个UIToolbar,我花了一段时间才弄明白,最终我做到了,但当我尝试向按钮“上一个”*“下一个”*添加功能并完成时,我的程序很快无法编译 可以在此处看到整个错误消息: 2012-06-20 05:36:55.276 KegCop[79460:fb03]*由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[setValue:forUndefinedKey:]:此类不符合密钥完成的键值编码。” *第一次抛出调用堆栈

好的,我会尽量简短地说。我想在我的键盘上方安装一个UIToolbar,我花了一段时间才弄明白,最终我做到了,但当我尝试向按钮“上一个”*“下一个”*添加功能并完成时,我的程序很快无法编译

可以在此处看到整个错误消息:

2012-06-20 05:36:55.276 KegCop[79460:fb03]*由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[setValue:forUndefinedKey:]:此类不符合密钥完成的键值编码。”

*第一次抛出调用堆栈: 0x134a022 0x1733cd6 0x1349ee1 0xd31022 0xca2f6b 0xca2edb 0xcbdd50 0x5a571a 0x134bdea 0x12b57f1 0x5a426e 0x7adeef 0x7ae03e 0x382d7a 0x382ff8 0x38217f 0x391183 0x391c38 0x385634 0x1f84ef5 0x131e195 0x1282ff2 0x12818da 0x1280d84 0x1280C1809B 0x381c65 0x383626 0x2a8d 0x29f5 0x1 终止调用抛出ExceptionLdb

@阿比泽恩建议我读这本书。不管怎样,无论你怎么看,它都是超晚或超早的。更新后的项目可在此处找到:


只需下载zip,然后尝试构建,您就会看到我所说的内容。错误可能位于ViewControllerWelcome.m文件中的某个位置。

查看故事板或xib,无论您对ViewControllerWelcome对象使用哪个选项。此错误最可能的来源是某个对象与名为done的操作或出口有连接,而该类的代码中不存在该操作或出口。

最简单的检查方法是在Storyboard视图中按住Ctrl键并单击控制器,然后在生成的弹出窗口中查找旁边有黄色警告标记的对象。
只需按插座名称旁边的x键即可删除它。

我遇到了同样的问题,我使用了viewcontroller的xib,但后来我删除了它。但是在代码中,连接仍然从已删除的xib获取连接。因此,漫游的方法是为viewcontroller创建一个新的xib。然后问题就解决了。

如果您使用的是故事板,那么只需单击每个ViewController并选择它们的连接检查器。检查是否存在任何连接丢失的感叹号


正确删除它们。然后再次运行您的项目。

在我的情况下,我添加了-all_load在其他链接器标志中,以防止Xcode剥离我的库二进制代码。

在我的情况下,Xcode上有一些奇怪的缓存,即使删除了对IBOutlets的所有引用,仍然使它崩溃。IBOutlets指向的是我文件的旧版本,因此,即使从我的nib中删除和添加回文件或删除所有引用outlets都不起作用


解决方案:关闭xcode成功了,清理/深度清理项目可能会有所帮助。

启用异常断点。这将告诉您问题代码所在的位置。你不能指望人们下载、构建和修复你的整个项目。在某些地方,您已经将单词done用作方法名或键,而这与类中的任何内容都不对应。首先,我会在interface builder.yep.中将您的操作视为已连接。这就是答案,很可能您在Viecontroller中连接了某个从.h和.mYes中删除的内容,这就是我的原因。谢谢你帮我找到了问题。我已经重命名了一个属性,该属性是一个出口,需要更新情节提要以匹配。@Phillip Mills,你能看看关于NS[无论什么]用法描述码的另一个问题吗。我相信你在苹果开发者论坛上发布了类似的东西,我真的需要一个指向正确方向的指针。这对我也有帮助,加上Xcode在终止错误“未知类MyCustomViewController在Interface Builder文件中”上面的一行中说。我意识到我没有为自定义类指定“模块”!呜呜!还要确保您的属性插座位于带有类名的@接口内,或者位于它的超类中