【问题标题】:NSFetchedResultsController doesn't fetch up the child-parent moc chain?NSFetchedResultsController 不获取子父 moc 链?
【发布时间】:2013-06-28 01:08:18
【问题描述】:

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

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

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

但是,如果我依靠 NSFetchedResultsController 将这些更改拉入到同级上下文中,它们不会看到它们。

调用 -(void)performFetch: error; 似乎也没有拉动更改。

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

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

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

我是否必须使用通知来监控其他上下文的变化?

最后,文档中的某处是否提到了这一点?我一辈子都找不到它。

【问题讨论】:

    标签: ios cocoa core-data nsfetchedresultscontroller nsmanagedobjectcontext


    【解决方案1】:

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

    我处理这个问题的方式是将我的根上下文配置为NSMainQueueConcurrencyType,并将根上下文用于我的获取结果控制器。如果您更喜欢为 FRC 使用子上下文,则在父级保存后,重置子上下文并再次执行提取。

    Apple 文档

    文档中的相关段落是:

    当您在上下文中保存更改时,仅提交更改 “一个商店。”如果您保存子上下文,则更改将推送到其 父母。这些更改不会保存到持久存储中,直到 根上下文被保存。 (根托管对象上下文是 parent 为零。)此外,父级不会从 孩子们在它保存之前。如果需要,您必须保存子上下文 最终提交更改。

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

    【讨论】:

    • 所以,我尝试保存父上下文,但它仍然没有将我的更改推送到 FRC。那么 FRC 与普通的 fetch 请求有什么不同,因为它只从当前上下文中获取,而不是从父链中获取?情况似乎如此。
    • 我明白了,我会做一些实验。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多