我有一个长的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
操作核心数据操作,这可能允许在开始操作之前绘制运行循环。但实际上,正如评论者所提到的,不要在主线程上做一些需要四秒钟的事情。