【问题标题】:How do I solve a 'NSUnknownKeyException' ... setValue:forUndefinedKey:]: ...not key value coding compliant [duplicate]如何解决“NSUnknownKeyException”... setValue:forUndefinedKey:]: ...不符合键值编码 [重复]
【发布时间】:2012-06-22 12:08:16
【问题描述】:

好的,我会尽量简短。我想在我的键盘上方有一个 UIToolbar,我花了一段时间才弄明白,我最终做到了,但是当我尝试向按钮添加功能时 previous *next* 和 done 我的程序很快就无法编译了。

完整的错误信息可以在这里看到:

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 0x1280c9b 0x381c65 0x383626 0x2a8d 0x29f5为0x1) 终止称为抛出异常(lldb)

@Abizern 建议我阅读Apple Doc on Key value coding guide。无论如何,它是超晚,或者超早,但是你看它。更新的项目可以在这里找到:https://github.com/ipatch/KegCop

只需下载 zip,然后尝试构建,您就会明白我在说什么。错误可能位于 ViewControllerWelcome.m 文件中的某个位置。

【问题讨论】:

  • 启用异常断点。这将告诉您问题代码在哪里。您不能指望人们下载、构建和修复您的整个项目。在某个地方,您将“完成”一词用作方法名称或键,这与您的类中的任何内容都不对应。我首先会在界面生成器中查看您的操作。

标签: ios xcode debugging compiler-errors


【解决方案1】:

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

【讨论】:

  • 是的..这就是答案,很可能你可能已经在你的 Viecontroller 中连接了一些从 .h 和 .m 中删除的东西
  • 是的,这就是我的原因。谢谢
  • 帮我找到了问题。我重命名了一个作为插座的属性,需要更新情节提要以匹配。
  • @Phillip Mills,你能看看关于NS[whatever]UsageDescription 键的其他问题吗? stackoverflow.com/q/53710674/4124574。我相信您在此处的 Apple 开发者论坛 (forums.developer.apple.com/message/196093#196093) 上发布了类似的内容,我真的需要一个正确方向的指针。
  • 这对我也有帮助,而且 Xcode 在此终止错误“Interface Builder 文件中的未知类 MyCustomViewController”上方的行中说。我意识到我没有为自定义类指定“模块”!哎呀!
【解决方案2】:

最简单的检查方法是在情节提要视图中按住 Ctrl 键并单击控制器,然后在生成的弹出窗口中查找旁边有黄色警告标记的内容。 只需按 Outlet 名称旁边的 (x) 即可将其删除。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      我也遇到过同样的问题,我用了一个xib作为viewcontroller,但后来我把它删了。但是在代码中,连接仍然从已删除的 xib 中获取连接。所以走一走的方法是为viewcontroller创建一个新的xib。然后问题就解决了。

      【讨论】:

        【解决方案5】:

        在我的情况下,它是 xcode 上的一些奇怪的缓存,即使所有已删除的对 IBOutlets 的引用仍然使它崩溃。 IBOutlets 指向我的文件的旧版本,因此甚至无法删除和添加文件或从我的笔尖中删除所有引用出口......

        SOLUTION: 关闭 xcode 成功了,cleaning/deepCleaning the project 可能也有帮助。

        【讨论】:

        • 还要确保您的物业网点位于带有类名的@interface 或它的超类中
        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-06-05
          • 2013-12-03
          • 2020-01-05
          • 1970-01-01
          • 2015-05-03
          • 1970-01-01
          • 2015-03-30
          • 2014-07-03
          相关资源
          最近更新 更多