Swift 3.0 CoreData 创建多上下文

Posted

技术标签:

【中文标题】Swift 3.0 CoreData 创建多上下文【英文标题】:Swift 3.0 CoreData create multi context 【发布时间】:2016-10-04 15:47:35 【问题描述】:

以前在应用程序中,我使用多上下文方法来使用后台上下文对后台线程中的数据进行操作。就这样完成了。

 // backgroundContext in the background thred
    lazy var backgroundContext: NSManagedObjectContext? = 
        let coordinator = self.store.persistentStoreCoordinator
        var backgroundContext = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType)
        backgroundContext.persistentStoreCoordinator = coordinator
        return backgroundContext
    ()

它是这样使用的:

self.coreDataManager.saveContext(self.coreDataManager.backgroundContext!)

使用新的 CoreData 更新,我们应该如何处理多个 CoreData 上下文?因为现在有了NSPersistentContainer,它应该以另一种方式处理。

【问题讨论】:

你试过newBackgroundContext()的方法吗? 【参考方案1】:

根据 Apple 自己的文档 here 和 What's new in Core Data 谈话,这是推荐的方法:

let container = NSPersistentContainer.persistentContainerWithName("myApp")
container.performBackgroundTask()  (moc) in
    // use moc to do asynchronous work

默认情况下,NSPersistentContainer 为 UI 相关任务提供上下文 ViewContext,并能够创建您可能需要的尽可能多的后台上下文,具体方法如下:

let moc = container.newBackgroundContext

但请注意,在演讲中,他们建议使用 performBackgroundTask() 而不是创建自己的背景上下文。这是因为上述方法做了一些如果你自己使用上下文就不会发生的优化。

【讨论】:

以上是关于Swift 3.0 CoreData 创建多上下文的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift 3.0 将 CoreData 保存到 Web 服务器

当上下文为 nil 时,Swift Temp CoreData 对象无法设置 ivars

swift 核心数据基本类上下文管理器。 #CoreData #Swift

同时使用 CoreData、多线程和绑定

Swift 3.0 - 核心数据 / 意外发现 nil

浅谈SwiftUI 3.0新加入的CoreData动态FetchRequest过滤与排序特性