CoreData:带有子主上下文的私有上下文 - FetchedResultsController 未获得更新
Posted
技术标签:
【中文标题】CoreData:带有子主上下文的私有上下文 - FetchedResultsController 未获得更新【英文标题】:CoreData: Private context with child Main context - FetchedResultsController not getting updates 【发布时间】:2015-07-30 11:08:02 【问题描述】:我一直在尝试按照Marcus Zarra 的描述构建一个核心数据堆栈,其中他有一个私有队列上下文和一个主队列上下文(其中主队列上下文是私有队列上下文的子级)。
我相信我已经在 Swift 中忠实地重建了 (here) 他所描述的 MCPersistenceController
(示例代码是 Obj-C)。
问题在于我的ListViewModel class(其中包含NSFetchedResultsController
)。无论我尝试什么,当插入新的 Item
对象时,它的委托回调(controllerDidChangeContent
等)都不会被调用。
FRC 和 NSFetchRequest 使用主上下文;该项目被插入到主要上下文中; save function 保存主上下文,然后将更改合并到私有队列中
如果我在插入和保存后对任一上下文执行手动 executeFetchRequest
,我确实会返回新创建的 Item
。
如果我监听NSManagedObjectContextObjectsDidChangeNotification
通知,它们确实在插入后被触发。
当我重新启动应用程序时,我插入的Item
s 现在会显示出来。
我只能假设在错误的线程上做某事并且没有报告错误是一个问题,但无论我尝试了什么,当我插入一个新的Item
时,FRC 不会触发委托回调。可能是我错过了一些 Swift 的东西。
现在我真的很感谢任何建议 ????。
我的简单概念验证项目 (Swift 1.2) 位于 GitHub。 (我还没有接触到 CloudKit 的东西..)。
【问题讨论】:
【参考方案1】:您的 ListViewModel
对象是一个纯 Swift 对象。获取的结果控制器使用 NSObject-descended 功能来检查委托是否响应委托方法。
@objc
class ListViewModel: NSFetchedResultsControllerDelegate
修复它。
【讨论】:
就是这样!太棒了,谢谢 - 上帝知道我需要多长时间才能找到它。以上是关于CoreData:带有子主上下文的私有上下文 - FetchedResultsController 未获得更新的主要内容,如果未能解决你的问题,请参考以下文章
多线程 CoreData 应用程序中主上下文和私有上下文的推荐合并策略
NSManagedObjectContext 从私有上下文合并,只刷新改变的对象
CoreData:带有privateQueueConcurrencyType的backgroundContext和子上下文之间的区别?