swift3 - 用背景数据更新ui

时间:2016-08-22 14:22:51

标签: swift3

使用后台线程中的数据进行UI更新时遇到困难。我阅读了大量的文档,但仍然遗漏了一些内容......

func getData(){
    DispatchQueue.global(qos: .background).async {
        let token = GetTokenOperation()

        token.success = { item in
            print("Success")
        }

        token.failure = {error in
            print(error.localizedDescription)
        }

        NetworkQueue.shared.addOperation(op: token)

        DispatchQueue.main.async {
            // qos' default value is ´DispatchQoS.QoSClass.default`
            self.updateUI()
        }
    }

}

在打印“成功”之前执行self.updateUI()。当我把self.updateUI()放在闭包token.success中时,它确实崩溃了。

2 个答案:

答案 0 :(得分:6)

你试过这个吗?

    token.success = { item in
        print("Success")
        DispatchQueue.main.async {
            self.updateUI()
        }
    }

答案 1 :(得分:0)

就我而言,我需要在后台模式下更新UI。我是一个UIProgressView和计时器。虽然很耗时,但我更新了进度视图以显示剩余时间。但是,当用户单击“主页”按钮时,应用程序将进入免费模式,UI不会更新。为解决此问题,我将DispatchQueue与.background选项一起使用。

DispatchQueue.global(qos: .background).async {
            DispatchQueue.main.async {
                let fractionalProgress = Float(self.counter) / 60.0
                let animated = self.counter != 0
                self.barProgress.setProgress(fractionalProgress, animated: animated)
            }
        }

我希望这会对某人有所帮助。