CoreData:具有子主上下文的私有上下文 - FetchedResultsController 未获取更新
CoreData: Private context with child Main context - FetchedResultsController not getting updates
我一直在尝试构建一个 Core Data 堆栈,如 Marcus Zarra 所述,其中他有一个私有队列上下文和一个主队列上下文(其中主队列上下文是私有队列的子项)上下文)。
我相信我已经正确重建(here)他在 Swift 中忠实描述的 MCPersistenceController
(示例代码是 Obj-C)。
问题出在我的 ListViewModel class(其中包含一个 NSFetchedResultsController
)。无论我尝试什么,当插入新的 Item
对象时,它的委托回调(controllerDidChangeContent
等)都不会被调用。
FRC 和 NSFetchRequest 使用 Main Context;该项目被插入到主要上下文中; save function 保存 Main Context,然后将更改合并到 Private Queue
如果我在插入和保存后对任一上下文执行手动 executeFetchRequest
,我确实会得到新创建的 Item
。
如果我监听 NSManagedObjectContextObjectsDidChangeNotification
通知,它们确实会在插入后触发。
当我重新启动应用程序时,我插入的 Item
现已显示。
我只能假设这是在错误的线程上做某事的问题并且没有报告错误,但无论我尝试了什么,当我插入一个新的 Item
FRC 触发没有委托打回来。可能是我遗漏了一些 Swift 东西。
我非常感谢此时的任何建议。
我的简单概念验证项目 (Swift 1.2) 在 GitHub 上。 (我还没有得到 CloudKit 的东西..)。
您的 ListViewModel
对象是一个纯 Swift 对象。获取的结果控制器使用 NSObject-descended 功能来检查委托是否响应委托方法。
@objc
class ListViewModel: NSFetchedResultsControllerDelegate{
修复它。
我一直在尝试构建一个 Core Data 堆栈,如 Marcus Zarra 所述,其中他有一个私有队列上下文和一个主队列上下文(其中主队列上下文是私有队列的子项)上下文)。
我相信我已经正确重建(here)他在 Swift 中忠实描述的 MCPersistenceController
(示例代码是 Obj-C)。
问题出在我的 ListViewModel class(其中包含一个 NSFetchedResultsController
)。无论我尝试什么,当插入新的 Item
对象时,它的委托回调(controllerDidChangeContent
等)都不会被调用。
FRC 和 NSFetchRequest 使用 Main Context;该项目被插入到主要上下文中; save function 保存 Main Context,然后将更改合并到 Private Queue
如果我在插入和保存后对任一上下文执行手动
executeFetchRequest
,我确实会得到新创建的Item
。如果我监听
NSManagedObjectContextObjectsDidChangeNotification
通知,它们确实会在插入后触发。当我重新启动应用程序时,我插入的
Item
现已显示。
我只能假设这是在错误的线程上做某事的问题并且没有报告错误,但无论我尝试了什么,当我插入一个新的 Item
FRC 触发没有委托打回来。可能是我遗漏了一些 Swift 东西。
我非常感谢此时的任何建议。
我的简单概念验证项目 (Swift 1.2) 在 GitHub 上。 (我还没有得到 CloudKit 的东西..)。
您的 ListViewModel
对象是一个纯 Swift 对象。获取的结果控制器使用 NSObject-descended 功能来检查委托是否响应委托方法。
@objc
class ListViewModel: NSFetchedResultsControllerDelegate{
修复它。