主线程检测器错误:双击UILabel Swift失败



我正在从API收集一些数据,然后在上面运行一些计算。由于我需要小数,所以这些数字存储为Doubles。计算和所有运行顺利,在控制台中获得正确的打印输出,但我似乎无法让它更新我的UILabel。我在控制台中得到以下错误(它成功构建btw(:

Main Thread Checker: UI API called on a background thread: -[UILabel setText:]
PID: 69869, TID: 13575919, Thread name: (none), Queue name: NSOperationQueue 0x113e13690 (QOS: UNSPECIFIED), QoS: 0

这是我的代码和计算。值通过API更新,所以当我进行计算时,它们不仅仅是0:

@IBOutlet weak var renewableLabel: UILabel!

var hydroValue : Double = 0
var windValue : Double = 0

var renewables : Double = 0
var renewPercent : Double = 0
func calcIndex(){

renewables = windValue + hydroValue
renewPercent = Double(round(10*((renewables / productionValue) * 100))/10)

//print(productionValue)

print("(renewPercent) %")

updateLabel()
}
func updateLabel(){
renewableLabel.text = ("(renewPercent)")
}

在将Double发送到Label之前,我尝试将其重新格式化为String,但仍然存在samr错误。如果我在另一个只有双打的项目中这样做,renewableLabel.text = ("(renewPercent)")就可以正常工作。我不确定UILable是否是这里的最佳选择。我很乐意换:(。

问题与您的计算或使用的数字类型无关。

您需要将UI更新发送到主线程,正如错误明确指出的那样。

func updateLabel(){
DispatchQueue.main.async {
self.renewableLabel.text = ("(self.renewPercent)")
}
}

最新更新