У меня есть часть кода, где я вызываю migratePersistentStore
, и я хочу, чтобы предотвратить любые temporaryContext
, чтобы что-либо сделать за одно и то же время, как?Как предотвратить одновременный запуск временного конфликта с migratePersistentStore
Моя идея основана на semaphore
и 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)
Что вы думаете об этом? Любое решение bette? Можно ли использовать в этом случае dispatch_barrier_async
?