0

呼び出すコード部分があり、同時に何かを実行migratePersistentStoreできないようにしたいのですが、どうすればよいですか?temporaryContext

semaphore私の考えは aと aに基づいていdispatch_groupます。

コード A:

dispatch_group_wait(dgLoadMain, DISPATCH_TIME_FOREVER)
dispatch_semaphore_wait(semaLoadMain, DISPATCH_TIME_FOREVER)

mainMOC!.performBlockAndWait({

    mainMOC!.persistentStoreCoordinator!.migratePersistentStore(/* ... */)
})

dispatch_semaphore_signal(semaLoadMain)

コード B:

dispatch_group_enter(dgLoadMain)
dispatch_semaphore_wait(semaLoadMain, DISPATCH_TIME_FOREVER)
dispatch_semaphore_signal(semaLoadMain)
let context = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType)
context.parentContext = mainMOC

var context: NSManagedObjectContext
context.performBlockAndWait({

    // .. some code I do not want to run when migrating persistent store

    context.save(nil)
})

mainMOC.performBlockAndWait({

    mainMOC.save(nil)
})

dispatch_group_leave(dgLoadMain)

あなたはそれについてどう思いますか?何か良い解決策はありますか?dispatch_barrier_asyncこの場合、利用は可能ですか?

4

1 に答える 1