CoreData:具有子主上下文的私有上下文 - FetchedResultsController未获取更新

时间:2015-07-30 11:08:02

标签: ios swift core-data nsfetchedresultscontroller

我一直在尝试构建一个核心数据堆栈,如Marcus Zarra所述,他有一个私有队列上下文和一个主队列上下文(其中主队列上下文是私有队列上下文的子级)

我相信我已经正确地重建了(here)他描述的MCPersistenceController忠实于Swift(示例代码是Obj-C)。

问题出在我的ListViewModel class(其中包含NSFetchedResultsController)。无论我尝试什么,当插入新的controllerDidChangeContent对象时,它的委托回调(Item等)都不会被调用。

  • FRC和NSFetchRequest使用主上下文;该项目插入主要上下文; save function保存主要上下文,然后将更改合并到专用队列

  • 如果我在插入和保存后在任一上下文中执行手动executeFetchRequest,我会重新获得新创建的Item

  • 如果我收听NSManagedObjectContextObjectsDidChangeNotification通知,则插入后确实会触发。

  • 当我重新启动应用时,我的插入Item现已显示。

我只能假设在错误的线程上做某事并且没有报告错误是一个问题,但无论我尝试过什么,当我插入新的Item时,FRC不会触发任何委托回调。可能是我错过了一些Swift的东西。

我非常感谢此时的任何建议。

我简单的概念验证项目(Swift 1.2)在GitHub上。 (我还没达到CloudKit的东西......)。

1 个答案:

答案 0 :(得分:4)

您的ListViewModel对象是纯粹的Swift对象。获取的结果控制器使用NSObject后代功能来检查委托是否响应委托方法。

@objc
class ListViewModel: NSFetchedResultsControllerDelegate{

修复它。