2016-10-04 60 views
2

以前在应用程序中,我使用多上下文方法来使用后台上下文来处理后台线程中的数据。它是这样做的。Swift 3.0 CoreData创建多上下文

// 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

你试过'newBackgroundContext()'方法吗? –

回答

5

根据苹果自己的文档提供hereWhat'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

注意虽然,他们诠释了recomme谈话nd使用performBackgroundTask()而不是创建自己的背景上下文。这是因为所述方法会进行一些优化,如果您自己使用上下文,则不会发生这些优化。