我找不到任何关于此的澄清,所以它可能是一个错误。
问题是,我有一系列父子管理对象上下文。
当我保存子上下文时,更改会被推送到父级,我可以使用普通的旧NSFetchRequest来获取。
但是,如果我依赖NSFetchedResultsController将这些更改拉到第一个兄弟的上下文中,他们就看不到它们了。
调用-(void)performFetch: error;
似乎也不会引起变化。
重新启动应用后,所有新数据都可用。
我的假设是NSFetchedResultsController仅从其当前上下文中获取,并且不会跟随链到持久性存储。
有人可以请我直接来这里吗?
我是否必须使用通知来监控其他环境中的更改?
最后,这是在doc的某处提到的吗?我找不到它的生命。
答案 0 :(得分:6)
保存子上下文时,更改会传播到父级,但在保存根上下文(即没有父级)之前,它们不会提交到持久性存储。父上下文中的更改不会推送到其他子项(兄弟姐妹)。
我处理这个的方式是我将我的根上下文配置为NSMainQueueConcurrencyType
,并使用根上下文来获取我的获取结果控制器。如果您希望为FRC使用子上下文,则在父项保存之后,重置子上下文并再次执行获取。
Apple文档
文档中的相关段落是:
在上下文中保存更改时,仅提交更改 “一个存储起来。”如果您保存子上下文,则会将更改推送到其中 家长。直到这些更改才会保存到持久性存储中 根上下文已保存。 (根管理对象上下文是其中的一个 parent是nil。)此外,父母不会从中提取更改 孩子们节省之前。如果需要,您必须保存子上下文 最终要做出改变。