应用程序在启动期间因valueForUndefinedKey错误而崩溃

时间:2012-03-19 13:24:50

标签: iphone ios core-data ios5

在应用启动期间,我会显示一个表格视图。每行以某种形式显示托管对象的数据。一位客户报告了应用启动时的崩溃。我查看了他的崩溃日志,可以追溯到我在[NSManagedObject valueForKey:]方法中使用cellForRowAtIndexPath方法的地方。该应用程序因[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

1 个答案:

答案 0 :(得分:0)

这可能是内存管理问题。请参阅调用-[Activity isOn:]的{​​{1}}。您发送的对象valueForKey:显然是错误的类。查看对象的来源。

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

为什么会这样? EXC_BAD_ACCESS在他们的一生中有许多微妙之处。例如,它们可能会在您应用的其他部分被删除,因此您应始终期望并采取相应的行动。

我希望这会指出你正确的方向。