相当新的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删除它。

希望这有助于!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top