2016-10-04 49 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()而不是創建自己的背景上下文。這是因爲所述方法會進行一些優化,如果您自己使用上下文,則不會發生這些優化。