Swift - обновить UILabel из функции - PullRequest
0 голосов
/ 18 марта 2019

Я делаю приложение Bluetooth и хочу поставить 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
    }
}


Я вызываю эту функцию внутри моей функции ReadRSSI из CBPeripheral.
В моем терминале есть этот текст

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

Но когда я поворачиваю свой телефон, он обновляет ярлыки, я пытался поставить «себя» перед моими ярлыками.
Я также пытался вызвать свою функцию внутри таймера, но это выдает ошибку 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 голосов
/ 18 марта 2019

Проблема решена:

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")
    }
}
...