对 iPhone 开发者来说相当新。我的应用程序使用核心数据,并且有一次我试图在 NSFetchedResultsControllerDelegate 方法期间保存一些数据:
- (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 或通知处理程序引起的。与用户信息(空)
2010-02-09 23:02:03.931 app2[26664:207] *** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“在保存之前无法处理挂起的更改。100 次尝试后上下文仍然很脏。通常,这种递归污染是由错误的验证方法、-willSave 或通知处理程序引起的。
我的研究得出了一些非常有限的结果——好东西我在这里可以记录下来,嗯?:-) 但是我的直觉是 MOC 被写入我控制器的其他地方,尽管我找不到发生这种情况的证据。viewDidLoad 方法使用 NSFetchedResultsController 来获取初始数据,仅此而已。
关于这里可能有什么问题的任何建议?像往常一样,非常感谢您基于社区的蜂巢思维!
干杯,亚伦