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行插入导致此错误的想法,或者我的单个托管文档可能会导致可能导致此问题的不一致的问题?
在NSFetchedResultsChangeInsert事件的情况下,indexPathis nil和newIndexPath是插入对象的目标路径.因此你必须打电话
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
withRowAnimation:UITableViewRowAnimationAutomatic];
Run Code Online (Sandbox Code Playgroud)
用于更新事件.
| 归档时间: |
|
| 查看次数: |
2128 次 |
| 最近记录: |