Отладка ошибки NSObjectInaccessibleException. Управляемый объектный контекст объекта становится нулевым? - PullRequest
0 голосов
/ 01 декабря 2011

У меня есть простое приложение для iphone с отношением один ко многим подарка к получателю (то есть один получатель может получить много подарков, но каждый подарок должен идти одному получателю. Чтобы создать связь между подарком и получателем, Сначала я создаю новый объект-получатель в контексте управляемого объекта, назначаю новым получателем объект-получатель нового контроллера, а затем добавляю новый контроллер в навигационный контроллер. Когда новый контроллер возвращается, я назначаю нового получателя подарок.

Код для этой транзакции:

RecipientEditController *nextController = [
                                            [RecipientEditController alloc]
                                            initWithStyle:UITableViewStyleGrouped
                                          ];

Recipient *new = [NSEntityDescription 
                  insertNewObjectForEntityForName:@"Recipient" 
                  inManagedObjectContext:gift.managedObjectContext
                 ];
[new addGiftsObject:gift];

nextController.recipient = new;
nextController.recipient.hideRelationships = YES;

[self.navigationController pushViewController:nextController animated:YES];

if ([new hasData]) {
    gift.recipient = new;
} else {
    [gift.managedObjectContext deleteObject:new];
}

break;

В новом контроллере объект-получатель работает нормально; Я могу напечатать описание получателя в методе ViewWillAppear. Но когда я попадаю в метод tableView: cellForRowAtIndexPath, мой объект-получатель больше не является допустимым: его managedObjectContextProperty имеет значение nil, и вызывается метод receiveient.firstName (свойство, определенное в классе модели и в базе данных), возникает ошибка.

Ошибка:

2011-11-30 17:22:18.111 Gift Hero[36359:b603] *** Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0x59e65c0 <x-coredata://97FDB78C-6F65-4B54-8DBB-00A9C6A4B4C8/Recipient/p21>''

Есть идеи, что происходит? Это буквально сводит меня с ума! Как получатель может просто сделать недействительным между отображением представления и отображением таблицы?!

Заранее спасибо, PT

1 Ответ

0 голосов
/ 01 декабря 2011

Хорошо, я думаю, что понял это.Нажатие на новый viewController NOT , кажется, завершает выполнение текущего метода, как может вызывать другая функция.Поэтому, когда я удаляю объект после нажатия на контроллер представления, он удаляет объект в другом контроллере представления.Я не очень понимаю логику, стоящую за этим, но это то, что есть ...

...