我一直在尝试构建一个核心数据堆栈,如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的东西......)。
答案 0 :(得分:4)
您的ListViewModel
对象是纯粹的Swift对象。获取的结果控制器使用NSObject后代功能来检查委托是否响应委托方法。
@objc
class ListViewModel: NSFetchedResultsControllerDelegate{
修复它。