【问题标题】:How do I track down the source of a KVC exception: this class is not key value coding-compliant for the key toolbar?如何追踪 KVC 异常的来源:该类与键工具栏的键值编码不兼容?
【发布时间】:2011-02-14 00:13:01
【问题描述】:

当我尝试运行我的应用程序时出现此错误:

2010-04-29 13:49:01.355 MyApp[56123:207] *** Terminating app due to uncaught
exception 'NSUnknownKeyException', reason: '[<MyViewController 0x5112b10>
setValue:forUndefinedKey:]: this class is not key value coding-compliant for 
the key toolbar.'

MyViewController 曾经有一个名为“工具栏”的IBOutlet,它连接到笔尖中的UIToolbar 对象。我决定不再需要工具栏或笔尖,所以我将它们从项目中删除。但是 Xcode 似乎仍然想引用“工具栏”。

如果我不再使用笔尖,对工具栏的引用可能在哪里?我可以合成一个虚拟的“工具栏”属性来安抚 Xcode,但我想避免这种丑陋的 hack。

编辑:奇怪的是,当我在设备而不是模拟器上运行代码时,没有引发异常。此外,当我对MyViewController(不包含工具栏)使用一个简单的笔尖时,异常就消失了。我正在使用 git,当我从 MyViewController 之前返回运行我之前的代码提交时,甚至有一个工具栏或一个 nib,这些奇怪的也给出了异常。该代码曾经运行良好。我确实认为这个异常与 Xcode 和模拟器有关,以及我从项目中删除不需要的 nib 时的某种遗留状态。

【问题讨论】:

    标签: cocoa cocoa-touch xcode debugging key-value-coding


    【解决方案1】:

    Xcode 是一个 IDE。当您的应用程序运行时,不是 Xcode 向您的视图控制器询问工具栏。

    有两种方法可以解决此问题:

    1. objc_exception_throw 上设置断点,然后在调试器下运行您的应用。
    2. -[NSObject(NSKeyValueCoding) valueForUndefinedKey:] 上设置断点,然后在调试器下运行您的应用。

    无论哪种方式,当异常发生时,调试器都会中断(中断)您的应用程序。查看堆栈跟踪以了解发送 valueForKey: 消息的内容。

    【讨论】:

    • 谢谢,彼得。我会这样做,但是如何设置这些断点?我没有在我的代码中显式调用这些函数。
    猜你喜欢
    • 1970-01-01
    • 2013-06-23
    • 2013-10-11
    • 2013-05-23
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多