核心数据上下文“脏”:MOC保存崩溃应用
相当新的iPhone开发。我的应用程序使用的核心数据,并在一个点上,我试图在NSFetchedResultsControllerDelegate方法过程中保存一些数据:核心数据上下文“脏”:MOC保存崩溃应用
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath {
我得到这个最右出苹果对这个问题的文件。删除动作看起来就像这样:
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来获取初始数据,但就是这样。
有什么建议可能是错误的地方?像往常一样,你的基于社区的蜂巢头脑非常感谢!
欢呼声,阿隆
(如果我理解正确的问题) 我认为,所有你需要在这种情况下,做的是:
case NSFetchedResultsChangeDelete:
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
break;
请记住,方法
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath
是基础数据发生变化后通知您。所以我相信你的对象已经被删除了,你不需要手动删除它。所有剩下的工作就是将它从tableView中删除。
希望这会有所帮助!
感谢你们俩。马库斯,你关于委托方法被称为MOC保存的结果的说明确实为我明确了它。我应该去买你的书或其他东西...... :-) – 2010-02-11 02:25:19