当我的应用程序第一次启动时,我执行将数据从磁盘导入 CoreData 的任务。我在后台线程中做事。然后我切换到主线程并从 CoreData 执行加载。
问题是有时从 CoreData 加载发生在从磁盘导入完成之前。所以我需要一种方法来等待导入完成,并且只有它们从数据库执行加载。
我如何在 Swift 中执行此操作?
我的代码是这样的:
func firstTimeLaunch() {
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0)) { [unowned self] in
self.importArticlesListFromDisk()
self.importArticlesFromDisk()
dispatch_async(dispatch_get_main_queue()) { [unowned self] in
self.loadArticlesListFromDb()
self.loadArticlesFromDb()
}
}
}
最佳答案
也许您应该尝试向 importArticlesListFromDisk 和 importArticlesFromDisk 添加完成处理程序,然后在完成 block 中从数据库加载。
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0)) { [unowned self] in
self.importArticlesAndArticlesListFromDisk() {
// Completion Handler
dispatch_async(dispatch_get_main_queue()) { [unowned self] in
self.loadArticlesListFromDb()
self.loadArticlesFromDb()
}
}
}
关于multithreading - Swift - 我如何等待 dispatch_async 完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33825588/