核心数据上下文“脏”:MOC保存应用程序崩溃
-
19-09-2019 - |
题
相当新的iPhone开发。我的应用程序使用核心数据,并在一个点我试图一个NSFetchedResultsControllerDelegate方法期间以节省一些数据:
- (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,或通知处理程序引起的。与用户信息(NULL)
2010-02-09 23:02:03.931 APP2 [26664:207] ***终止应用程序由于未捕获的异常 'NSInternalInconsistencyException',原因:“无法处理挂起的更改保存之前。上下文之后仍然是100次尝试脏。典型地,该递归弄脏由坏验证方法,-willSave,或通知处理程序引起的。“
我的研究已经变成了一些非常有限的结果 - 我这里有好东西来记录这一点,是吗? :-)但我的直觉是说,商务部正在被写入到其他地方在我的控制器,但我找不到这种事情发生的证据。 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删除它。
希望这有助于!
不隶属于 StackOverflow