CoreData保存问题

use*_*786 3 core-data nsfetchedresultscontroller ipad ios uimanageddocument

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

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

[document saveToURL:document.fileURL forSaveOperation:UIDocumentSaveForOverwriting     completionHandler:nil]; 
Run Code Online (Sandbox Code Playgroud)

这正确地调用了NSFetchedResultsControllerDelegate方法: - (void)controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:

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

[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
Run Code Online (Sandbox Code Playgroud)

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

"CoreData:错误:严重的应用程序错误.在Core Data更改处理期间捕获到异常.这通常是NSManagedObjectContextObjectsDidChangeNotification的观察者中的错误. * - [__ NSPlaceholderArray initWithObjects:count:]:尝试从对象[0]插入nil对象userInfo(null)"

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

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

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

Mar*_*n R 7

NSFetchedResultsChangeInsert事件的情况下,indexPathis nilnewIndexPath是插入对象的目​​标路径.因此你必须打电话

[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
                      withRowAnimation:UITableViewRowAnimationAutomatic];
Run Code Online (Sandbox Code Playgroud)

用于更新事件.