以前在应用程序中我使用多上下文方法来使用后台上下文来操作后台线程中的数据。它是这样完成的。
// 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
,应该以另一种方式处理它。
答案 0 :(得分:5)
根据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()
而不是创建自己的背景上下文。这是因为如果您自己使用上下文,所述方法会进行一些优化。