Swift-从函数更新UILabel

时间:2019-03-18 01:12:30

标签: ios swift multithreading uilabel cbperipheral

我正在制作一个蓝牙应用程序,我想放置2个标签来控制是否已连接并显示RSSI,所以我已经编写了此功能

func updateLabel(){
    LRSSI.text = String(RSSINb)
    if(Connected == true){
        LEtat.text = "Connected"
        LEtat.textColor = UIColor.green
    }else{
        LEtat.text = "Disconnected"
        LEtat.textColor = UIColor.red
    }
}


我从CBPeripheral的ReadRSSI函数中调用此函数。
我的终端中有此文字

Main Thread Checker: UI API called on a background thread: -[UILabel setText:]

但是,当我旋转手机以更新标签时,我尝试将“ self”放在标签前。
我也尝试在计时器内调用函数,但这给了我SIGBART错误
那么,有没有一种方法可以更新标签或重新加载ViewController?

编辑: 调用我的函数:

 func peripheral(_ peripheral: CBPeripheral, didReadRSSI RSSI: NSNumber, error: Error?) {
    print(RSSI)
    peripheral.readRSSI()

    RSSINb = Int(RSSI) * -1
    updateLabel()
    if(RSSINb > 150){
        WriteValue(valeur: "z")
    }
}

1 个答案:

答案 0 :(得分:0)

已解决的问题:

func peripheral(_ peripheral: CBPeripheral, didReadRSSI RSSI: NSNumber, error: Error?) {
    print(RSSI)
    peripheral.readRSSI()

    RSSINb = Int(RSSI) * -1
    DispatchQueue.main.sync {
        updateLabel()
    }
    if(RSSINb > 150){
        WriteValue(valeur: "z")
    }
}