NSFetchedResultsController不会获取子父moc链?

时间:2013-06-28 01:08:19

标签: ios cocoa core-data nsfetchedresultscontroller nsmanagedobjectcontext

我找不到任何关于此的澄清,所以它可能是一个错误。

问题是,我有一系列父子管理对象上下文。

当我保存子上下文时,更改会被推送到父级,我可以使用普通的旧NSFetchRequest来获取。

但是,如果我依赖NSFetchedResultsController将这些更改拉到第一个兄弟的上下文中,他们就看不到它们了。

调用-(void)performFetch: error;似乎也不会引起变化。

重新启动应用后,所有新数据都可用。

我的假设是NSFetchedResultsController仅从其当前上下文中获取,并且不会跟随链到持久性存储。

有人可以请我直接来这里吗?

我是否必须使用通知来监控其他环境中的更改?

最后,这是在doc的某处提到的吗?我找不到它的生命。

1 个答案:

答案 0 :(得分:6)

保存子上下文时,更改会传播到父级,但在保存根上下文(即没有父级)之前,它们不会提交到持久性存储。父上下文中的更改不会推送到其他子项(兄弟姐妹)。

我处理这个的方式是我将我的根上下文配置为NSMainQueueConcurrencyType,并使用根上下文来获取我的获取结果控制器。如果您希望为FRC使用子上下文,则在父项保存之后,重置子上下文并再次执行获取。

Apple文档

文档中的相关段落是:

  

在上下文中保存更改时,仅提交更改   “一个存储起来。”如果您保存子上下文,则会将更改推送到其中   家长。直到这些更改才会保存到持久性存储中   根上下文已保存。 (根管理对象上下文是其中的一个   parent是nil。)此外,父母不会从中提取更改   孩子们节省之前。如果需要,您必须保存子上下文   最终要做出改变。

完整文档位于Core Data Release Notes for OS X v10.7 and iOS 5.0