Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

App crashes during startup with valueForUndefinedKey error

During the app startup, I show a table view. Each row shows a managed object's data in some form. One customer is reporting a crash in the app startup. I looked at his crash log and could track down to a place where I use [NSManagedObject valueForKey:] method inside cellForRowAtIndexPath method. The app crashes with [NSManagedObject valueForUndefinedKey:] exception.

How come just one device in a 1000s of devices could get this issue? Running the same version of iOS and the app, I couldn't imitate it in any of my devices. what could have gone wrong?

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
like image 850
Anand Avatar asked Sep 16 '26 02:09

Anand


1 Answers

This may be a memory management issue. See -[Activity isOn:] where it invokes valueForKey:. The object you send valueForKey: is apparently of the wrong class. See where the object is coming from.

The object may get over-released and its memory address may get occupied by an object of a different class which isn't KVO-compliant for trackname key. If that's the case, I would bet that your app gets EXC_BAD_ACCESS even more often.

Why would that happen? NSManagedObjects have many subtleties with regard to their lifetime. They may get deleted in other parts of your app, for example, so you should always expect that and act appropriately.

I hope this will point you in the right direction.

like image 151
Costique Avatar answered Sep 17 '26 22:09

Costique



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!