Довольно новый для iPhone dev. Мое приложение использует Core Data, и в какой-то момент я пытаюсь сохранить некоторые данные во время метода NSFetchedResultsControllerDelegate:Основные данные Контекст «грязный»: MOC save crashes app
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath {
Я получаю большую часть этого права из документации компании Apple по этому вопросу. Удаления действие выглядит так:
case NSFetchedResultsChangeDelete:
[managedObjectContext deleteObject:anObject];
NSError *error;
if (![managedObjectContext save:&error]) {
NSLog(@"WTF? %@", [error description]);
}
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
break;
Теперь, когда я делаю это, рассматриваемый объект будет удален после неизбежного краха. Так что происходит что-то правильное. Катастрофа интересна, однако:
Серьезная ошибка приложения. Исключение было обнаружено при обработке изменения основных данных: не удалось обработать ожидающие изменения перед сохранением. Контекст по-прежнему загрязнен после 100 попыток. Обычно это рекурсивное загрязнение вызвано неправильным методом проверки, -willSave или обработчиком уведомлений. с userInfo (null)
2010-02-09 23: 02: 03.931 app2 [26664: 207] *** Завершение приложения из-за неперехваченного исключения «NSInternalInconsistencyException», причина: «Не удалось обработать ожидающие изменения перед сохранением. Контекст по-прежнему загрязнен после 100 попыток. Обычно это рекурсивное загрязнение вызвано неправильным методом проверки, -willSave или обработчиком уведомлений. '
Мое исследование получило некоторые очень ограниченные результаты - хорошо, что у меня есть, чтобы задокументировать это, а? :-) Но моя кишка говорит, что MOC записывается в другом месте моего контроллера, хотя я не могу найти никаких доказательств этого. Метод viewDidLoad имеет NSFetchedResultsController, который используется для получения исходных данных, но это все.
Любые предложения о том, что может быть неправильным здесь? Как обычно, ваш общинный ум улья очень ценится!
Cheers, Аарон
Спасибо вам обоим. Маркус, ваша записка о методе делегата, вызванная спасением MOC, действительно закритировала его для меня. Я должен пойти купить твою книгу или что-то ... :-) –