swift - 如何在主线程中同步运行多个方法?
问题描述
我有一个很长的CoreData
过程(GlobalData.shared.resetData
函数),大约需要 4 秒,我想展示一个加载指示器。
两个动作(核心数据处理和显示加载指示器)都必须在主队列中运行,
你知道为什么显示加载指示器总是在CoreData
处理之后出现吗?
@IBAction func resetTapped(_ sender: UIButton) {
tableView.backgroundColor = .green
showLoading(loadingText: nil)
GlobalData.shared.resetData(completion: {
self.refreshGlobalData()
})
}
我添加了该行以更改表格背景颜色以进行测试。GlobalData.shared.resetData
核心数据处理(函数)后,背景颜色总是改变。
解决方案
当您像这样更改背景颜色时,您正在更改“模型”,但是直到下一次主线程重绘时您才会看到结果,直到您的代码放弃对运行循环的控制时才会发生这种情况(完成运行)。您可以尝试dispatch_async
使用 Core Data 操作,这可能允许在开始操作之前绘制运行循环。但实际上,正如评论者所提到的,不要在主线程上做需要四秒钟的事情。
推荐阅读
- javascript - 将 100 除以奇数 - Javascript
- javascript - store.select 进入 constrcutor 和 Angular 6 之前的区别?
- typescript - 如何在打字稿中使用 rxjs6 分区?
- angular - BehaviorSubject 冷漠的行为
- java - Android:如何像 truecaller 一样将我的应用添加到默认手机应用列表
- c++ - 仍在评估废弃分支中的嵌套 constexpr-if 语句?
- java - 执行加载命令时出错:org.hibernate.exception.GenericJDBCException:无法准备语句
- flutter - 在颤动中添加图像作为背景
- java - Java/Groovy:用类初始化方法的优雅方式
- java - 卷曲与 aem 的身份验证