【问题标题】:Not Key Value Coding-Compliant不符合键值编码
【发布时间】:2013-03-17 01:32:27
【问题描述】:

我的应用程序不断收到此错误消息。我收到错误的唯一一次是当我从后台状态恢复应用程序时。我需要一些帮助来找出错误所在。每次我从后台转到活动时都会发生这种情况,无论活动的 ViewController 是什么。

由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[<__nscfstring> valueForUndefinedKey:]:此类不符合键值编码的键响应。”

【问题讨论】:

标签: ios xcode key


【解决方案1】:

听起来像是在堆栈中的某个地方,正在访问 NSString 上不存在的键。 valueForUndefinedKey 是 Objective-C 中键值编码的一部分,也是 NSObject 的一部分。当valueForKey: 对几乎任何对象都不起作用时,可以调用它。

我发现在以下任一情况下最常抛出异常:

  1. 具有 XIB 文件情节提要的类被重构,并且 故事板或 XIB 没有。
  2. 您遇到了一个严重的内存问题,您在调用已释放对象的方法时访问了错误的内存。
  3. 这是一个正在运行的网络 JSON API,该方法从 JSON 序列化的对象类型错误(例如,使用 NSString 而不是 NSDictionary)。

在 Xcode 的 Breakpoint Navigator 中的 All Exceptions 上设置一个异常断点,以便您可以在代码中找到确切的行NSUnknownKeyException 被抛出。按 (+) 调出菜单。

【讨论】:

  • 看起来它正在第三方库 Xtify 中用于推送通知。这是if ([responseDictionary valueForKeyPath:kParentJson]!=[NSNull null] &amp;&amp; [[responseDictionary valueForKeyPath:kParentJson] length] &gt; 0 ) {
  • 是的,但responseDictionary 应该是NSDictionary 并且在NSString 工厂类(NSCFString) 上抛出异常。所以它可能是我列表中的#2 或 3 场景。您可以在调用 if ([responseDictionary valueForKeyPath:kParentJson]... 之前添加一个测试 responseDictionary 是否为 'not nil' 和一个 NSDictionary。
  • 我想知道您的应用程序是否无法访问服务器或未正确进行身份验证,因此从 JSON 序列化的对象类型错误。
  • 这可能是个问题。现在已经解决了,所以我认为是第三方库端的服务器相关。感谢您帮助我找到它的来源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 1970-01-01
  • 2013-12-03
相关资源
最近更新 更多