gpt4 book ai didi

ios - 如何防止 temporaryContext 与 migratePersistentStore 同时运行

转载 作者:行者123 更新时间:2023-11-28 21:43:21 26 4
gpt4 key购买 nike

我有一个调用 migratePersistentStore 的代码部分,我想阻止任何 temporaryContext 同时做任何事情,如何?

我的想法是基于一个信号量和一个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

最佳答案

一个更好的解决方案是设计应用程序,这样就没有必要了。您实际上是在阻止整个应用程序(包括 UI 线程)在迁移过程中执行任何操作。

最好将其开发为状态引擎,在后台执行迁移,然后在迁移完成时通知 UI。这样您的应用程序就会响应系统(并且您不会被操作系统杀死)并且还可以向用户提供潜在的状态更新。

您在这里所做的只是乞求操作系统在迁移过程中终止您的应用。

关于ios - 如何防止 temporaryContext 与 migratePersistentStore 同时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31232431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com