【发布时间】:2010-02-10 04:11:57
【问题描述】:
对 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 或通知处理程序引起的。与 userInfo (null)
2010-02-09 23:02:03.931 app2[26664:207] *** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“在保存之前无法处理挂起的更改。 100 次尝试后上下文仍然很脏。通常,这种递归污染是由错误的验证方法、-willSave 或通知处理程序引起的。'
我的研究得出了一些非常有限的结果——幸好我在这里可以记录下来,是吗? :-) 但是我的直觉是 MOC 正在我的控制器中的其他地方被写入,尽管我找不到发生这种情况的证据。 viewDidLoad 方法有 NSFetchedResultsController 用于获取初始数据,仅此而已。
对这里可能出现的问题有什么建议吗?像往常一样,非常感谢您基于社区的蜂巢思维!
干杯,亚伦
【问题讨论】:
标签: iphone core-data nsmanagedobject