如何在主线程同步运行多个方法?
How to run multi methods in main thread synchronously?
我有一个很长的 CoreData
过程(GlobalData.shared.resetData
函数),大约需要 4 秒,我想显示一个加载指示器。
两个动作(核心数据处理和显示加载指示器)都必须 运行 在主队列中,
你知道为什么显示加载指示器总是在 CoreData
过程之后发生吗?
@IBAction func resetTapped(_ sender: UIButton) {
tableView.backgroundColor = .green
showLoading(loadingText: nil)
GlobalData.shared.resetData(completion: {
self.refreshGlobalData()
})
}
我添加该行以更改 table 背景颜色以进行测试。核心数据处理后背景颜色总是改变(GlobalData.shared.resetData
函数)。
当您像那样更改背景颜色时,您正在更改 "model",但是直到下一次主线程重绘时您才会看到结果,这在您的代码之前不会发生放弃对 运行 循环的控制(完成 运行ning)。您可以尝试 dispatch_async
-ing 核心数据操作,这可能允许 运行 循环在开始您的操作之前绘制。但实际上,正如评论者所提到的,不要在主线程上做一些需要四秒钟的事情。
我有一个很长的 CoreData
过程(GlobalData.shared.resetData
函数),大约需要 4 秒,我想显示一个加载指示器。
两个动作(核心数据处理和显示加载指示器)都必须 运行 在主队列中,
你知道为什么显示加载指示器总是在 CoreData
过程之后发生吗?
@IBAction func resetTapped(_ sender: UIButton) {
tableView.backgroundColor = .green
showLoading(loadingText: nil)
GlobalData.shared.resetData(completion: {
self.refreshGlobalData()
})
}
我添加该行以更改 table 背景颜色以进行测试。核心数据处理后背景颜色总是改变(GlobalData.shared.resetData
函数)。
当您像那样更改背景颜色时,您正在更改 "model",但是直到下一次主线程重绘时您才会看到结果,这在您的代码之前不会发生放弃对 运行 循环的控制(完成 运行ning)。您可以尝试 dispatch_async
-ing 核心数据操作,这可能允许 运行 循环在开始您的操作之前绘制。但实际上,正如评论者所提到的,不要在主线程上做一些需要四秒钟的事情。