CoreData保存问题

时间:2012-09-20 06:20:22

标签: ios ipad core-data nsfetchedresultscontroller uimanageddocument

我的整个应用程序(包含两个实体)中有一个托管文档,用户可以从两个不同的视图控制器进行更新。每个视图控制器都有自己的NSFetchedResultsController属性,用于将更改中继到:一个视图控制器中的UICollectionView和另一个视图控制器中的UITableView。根视图控制器中的UICollectionView显示Teams,而segued视图控制器中的UITableView显示该团队中的Players。

当我在第一个视图控制器中时,我可以添加一个团队的实例,它可以正常工作,因为它将它们保存到文档中,然后将它们添加到UICollectionView。当我在第二个视图控制器中时,我将一个Player插入到CoreData中并调用:

[document saveToURL:document.fileURL forSaveOperation:UIDocumentSaveForOverwriting     completionHandler:nil]; 

这正确调用NSFetchedResultsControllerDelegate方法:      - (无效)控制器:didChangeObject:atIndexPath:forChangeType:newIndexPath:

在这个委托方法中,我打电话给:

[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

但是,在表视图上调用此行插入方法会导致以下Core Data错误:

“CoreData:错误:严重的应用程序错误。在Core Data更改处理期间捕获到异常。这通常是NSManagedObjectContextObjectsDidChangeNotification的观察者中的错误。 * - [__ NSPlaceholderArray initWithObjects:count:]:尝试使用userInfo(null)“

从对象[0]插入nil对象

我的fetchedResultsController肯定是NSManagedObjectContextObjectsDidChangeNotification的观察者,但是在管理对象上下文中的任何更改之前发生此错误。所以我基本上无法确定托管对象上下文在哪个位置获得null userInfo。

(另一件事是我的NSFetchedResultsController来自根视图控制器,它有UICollectionView,在下一个具有UITableView的视图控制器中的NSFetchedResultsController之前触发其委托方法,它自己激活。我认为这是正确的功能,因为团队和玩家都在CoreData中获得更新。

有关为什么UITableView行插入导致此错误的想法,或者我的单个托管文档可能会出现可能导致此问题的不一致的问题?

1 个答案:

答案 0 :(得分:7)

对于NSFetchedResultsChangeInsert事件,indexPathnil newIndexPath 是插入对象的目​​标路径。因此你必须致电

[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
                      withRowAnimation:UITableViewRowAnimationAutomatic];

更新活动。

相关问题