如何在主线程同步运行多个方法?

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