首页 > 解决方案 > 如何在主线程中同步运行多个方法?

问题描述

我有一个很长的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核心数据处理(函数)后,背景颜色总是改变。

标签: swiftgrand-central-dispatch

解决方案


当您像这样更改背景颜色时,您正在更改“模型”,但是直到下一次主线程重绘时您才会看到结果,直到您的代码放弃对运行循环的控制时才会发生这种情况(完成运行)。您可以尝试dispatch_async使用 Core Data 操作,这可能允许在开始操作之前绘制运行循环。但实际上,正如评论者所提到的,不要在主线程上做需要四秒钟的事情。


推荐阅读