2016-10-04 4 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 
    }() 

そして、それは次のように使用された:新しいCoreDataのアップデートで、我々は複数のCoreDataコンテキストを処理する方法

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

NSPersistentContainerとなっているので、別の方法で少し扱う必要があります。 Appleの独自のドキュメントによると

+0

あなたは 'newBackgroundContext()'メソッドを試しましたか? –

答えて

5

利用可能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

お知らせ、彼らはrecomme話をint型独自の背景コンテキストを作成する代わりにperformBackgroundTask()を使用してください。これは、あなたが自分でコンテキストを使用する場合には起こらない最適化を行うためです。

関連する問題