【问题标题】:App crashes during startup with valueForUndefinedKey error应用程序在启动过程中崩溃并出现 valueForUndefinedKey 错误
【发布时间】:2012-03-19 13:24:49
【问题描述】:

在应用启动期间,我显示了一个表格视图。每行以某种形式显示托管对象的数据。一位客户报告应用程序启动时发生崩溃。我查看了他的崩溃日志,可以追踪到我在cellForRowAtIndexPath 方法中使用[NSManagedObject valueForKey:] 方法的地方。应用程序因[NSManagedObject valueForUndefinedKey:] 异常而崩溃。

为什么在 1000 多台设备中只有一台设备会出现此问题?运行相同版本的 iOS 和应用程序,我无法在任何设备上模仿它。出了什么问题?

Last Exception Backtrace:

0   CoreFoundation                  0x3549e88f __exceptionPreprocess + 163
1   libobjc.A.dylib                 0x368c5259 objc_exception_throw + 33
2   CoreFoundation                  0x3549e5c5 -[NSException init] + 1
3   CoreData                        0x329d3b23 -[NSManagedObject valueForUndefinedKey:] + 327
4   Foundation                      0x312b59d1 _NSGetUsingKeyValueGetter + 125
5   CoreData                        0x3298d995 -[NSManagedObject valueForKey:] + 121
6   MyApp                   0x0000c513 -[Activity isOn:] (Activity.m:371)
7   MyApp                   0x0000beaf -[Activity firstMarkableDate] (Activity.m:163)
8   MyApp                   0x0000c0cb -[Activity statusString] (Activity.m:220)
9   MyApp                   0x0000bd51 -[Activity statusColor] (Activity.m:139)
10  MyApp                   0x00004af1 -[ActivityListViewController tableView:cellForRowAtIndexPath:] (ActivityListViewController.m:418)
11  UIKit                           0x3251d0a3 -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 547

【问题讨论】:

  • 您是否在任何时候更新过您的应用程序?换句话说,这可能是您的核心数据模型中的版本更改吗?
  • 应用的核心数据架构在任何 udpate 中都没有改变。并且相同的应用版本可以在我们的每一台设备(非开发设备)上完美运行
  • 你必须看看你的Activity,它似乎没有实现-isOn:(注意冒号)。
  • 它已实现并且适用于我们所有的设备。 Activity.m 内 [Activity isOn:] 中的第 371 行使用 [object valueForKey:"trackname"] 行访问托管对象属性
  • 你在调用什么 valueForKey,值应该是什么,键/值设置在哪里以及设置方式/设置什么。

标签: iphone ios core-data ios5


【解决方案1】:

这可能是内存管理问题。请参阅-[Activity isOn:],它调用valueForKey:。您发送valueForKey: 的对象显然属于错误的类别。查看物体的来源。

对象可能会被过度释放,并且其内存地址可能会被不符合 KVO 的 trackname 键的不同类的对象占用。如果是这种情况,我敢打赌你的应用会更频繁地获得EXC_BAD_ACCESS

为什么会这样? NSManagedObjects 在他们的生命周期中有很多微妙之处。例如,它们可能会在您应用的其他部分被删除,因此您应该始终期待并采取适当的行动。

我希望这将为您指明正确的方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-04
    • 2016-09-10
    • 2021-09-05
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多