NSFetchedResultsController 委托方法在 mergeChangesFromContextDidSaveNotification 后未触发
Posted
技术标签:
【中文标题】NSFetchedResultsController 委托方法在 mergeChangesFromContextDidSaveNotification 后未触发【英文标题】:NSFetchedResultsController delegate methods not firing after mergeChangesFromContextDidSaveNotification 【发布时间】:2010-10-21 04:51:19 【问题描述】:一直在浏览与此类似的帖子,但没有人回答我的问题。
与 CoreDataBooks 一样,我使用单独的 MOC 来添加和编辑项目并观察正确的通知,如下所示:
- (void)addControllerContextDidSave:(NSNotification*)saveNotification
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
// Merging changes causes the fetched results controller to update its results
[context mergeChangesFromContextDidSaveNotification:saveNotification];
NSLog(@"merging changes in rootview");
当我进行保存时,它被正确观察到。调试通知显示正确的上下文,调试上下文显示刚刚添加的项目。日志消息也打印得很好。但什么也没有发生。 NSFetchedResultsController 的委托方法都不会触发,表格视图也不会更新。
我尝试不缓存或清除它。我在 tableView 上尝试了reloadData
,但没有。
当我退出应用程序并重新启动时,它显示正常。
更新:
通知确实包含正确的上下文作为它的object
,其中包含正确的项目,但userInfo
哈希中没有任何内容:
userInfo =
inserted = "(\n)";
updated = "(\n)";
所以看起来通知中没有任何更改,尽管更改的项目具有正确的上下文....嗯。
【问题讨论】:
【参考方案1】:最愚蠢的错误奖太棒了......克里斯托夫!!
通知未显示任何内容的原因是我忘记在单独的 MOC 上进行保存,然后再调用设置通知的代理,然后再次保存。
由于 MOC 刚刚保存,第二次保存没有任何变化,因此通知保持空白。删除第一次保存,我应该早点做,确实解决了问题。
【讨论】:
以上是关于NSFetchedResultsController 委托方法在 mergeChangesFromContextDidSaveNotification 后未触发的主要内容,如果未能解决你的问题,请参考以下文章