Main Thread Checker Error: Double to UILabel Fails Swift
Main Thread Checker Error: Double to UILabel Fails Swift
我正在从一个 API 中收集一些数据,然后我会 运行 进行一些计算。这些数字存储为双打,因为我想要小数。计算和所有 运行 顺利,在控制台中获得正确的打印输出,但是我似乎无法让它更新我的 UILabel。我在控制台中收到以下错误(顺便说一句,它构建成功):
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 之前将其重新格式化为字符串,但仍然出现 samr 错误。如果我在另一个只有双打的项目中执行上述操作,则 renewableLabel.text = ("\(renewPercent)")
可以正常工作。我不确定 UILable 是否是这里的最佳选择。我很乐意切换 :).
该问题与您的计算或您使用的数值类型无关。
您需要将 UI 更新分派到主线程,正如错误中明确指出的那样。
func updateLabel(){
DispatchQueue.main.async {
self.renewableLabel.text = ("\(self.renewPercent)")
}
}
我正在从一个 API 中收集一些数据,然后我会 运行 进行一些计算。这些数字存储为双打,因为我想要小数。计算和所有 运行 顺利,在控制台中获得正确的打印输出,但是我似乎无法让它更新我的 UILabel。我在控制台中收到以下错误(顺便说一句,它构建成功):
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 之前将其重新格式化为字符串,但仍然出现 samr 错误。如果我在另一个只有双打的项目中执行上述操作,则 renewableLabel.text = ("\(renewPercent)")
可以正常工作。我不确定 UILable 是否是这里的最佳选择。我很乐意切换 :).
该问题与您的计算或您使用的数值类型无关。
您需要将 UI 更新分派到主线程,正如错误中明确指出的那样。
func updateLabel(){
DispatchQueue.main.async {
self.renewableLabel.text = ("\(self.renewPercent)")
}
}