Приложение вылетает при запуске с ошибкой valueForUndefinedKey - PullRequest
3 голосов
/ 19 марта 2012

Во время запуска приложения я показываю табличное представление.Каждая строка показывает данные управляемого объекта в некоторой форме.Один клиент сообщает о сбое при запуске приложения.Я посмотрел на его журнал сбоев и смог найти место, где я использую метод [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 голосов
/ 12 апреля 2012

Это может быть проблема управления памятью.Смотрите -[Activity isOn:], где он вызывает valueForKey:.Объект, который вы отправляете valueForKey:, очевидно, не того класса.Посмотрите, откуда исходит объект.

Объект может быть чрезмерно освобожден, а его адрес памяти может быть занят объектом другого класса, который не совместим с KVO для клавиши trackname.Если это так, я бы поспорил, что ваше приложение получает EXC_BAD_ACCESS еще чаще.

Почему это произошло?NSManagedObjects имеет много тонкостей в отношении своей жизни.Например, они могут быть удалены в других частях вашего приложения, поэтому вы всегда должны этого ожидать и действовать соответствующим образом.

Надеюсь, это укажет вам правильное направление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...