`NSFetchedResultsController` 从子上下文更新关系时不刷新

Posted

技术标签:

【中文标题】`NSFetchedResultsController` 从子上下文更新关系时不刷新【英文标题】:`NSFetchedResultsController` not refreshing when updating relationship from child context 【发布时间】:2015-07-16 20:29:09 【问题描述】:

如果我在子上下文中对托管对象进行更改然后保存该上下文,如果更改仅针对该对象的关系,则不会刷新。除了更新所述对象的属性之外,还有其他解决方案吗?

【问题讨论】:

令人惊讶的是核心数据不这样做 - 有很多关于它的质量检查,例如***.com/questions/4010334/… 【参考方案1】:

您是否尝试在合并更改后在上下文中调用-processPendingChanges?苹果的文档状态

直到控制器的托管对象上下文收到 processPendingChanges 消息后,更改才会反映。

显然,这在 MacOS 应用程序的事件循环结束时被调用,但不清楚或何时在 ios 上调用。

另外,请确保您在 NSFetchedResultsControllerDelegate 中至少实现了一种更改跟踪方法,否则您将不会跟踪上下文的任何更改。再次来自 Apple:

委托必须至少实现一种变更跟踪委托方法才能启用变更跟踪。提供 controllerDidChangeContent: 的空实现就足够了。

【讨论】:

上下文在哪个队列上? performBlockAndWait: 执行上下文队列上的块,这可能不是主要的。您确定要等到块完成吗?另外,您如何获得对上下文的更改?您是在 FRC 上调用 performFetch: 还是使用委托回调方法? 此问题不相关。 Core Data 只是不传播来自关系的更改 - 信不信由你

以上是关于`NSFetchedResultsController` 从子上下文更新关系时不刷新的主要内容,如果未能解决你的问题,请参考以下文章

表更新时 NSFetchedResultsController 无法滚动

使用 UISegmentedControl 切换 NSFetchedResultsController

核心数据 - NSFetchedResultsController 错误

将 fetchedResultsController 与 swift3 一起使用

无缘无故从获取的结果中删除托管对象

Core Data / NSManagedObject / NSFetchedResultsController 中的多属性“事务”?