я делаю приложение 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
Итак, есть ли способ обновить метки или перезагрузить контроллер просмотра?
РЕДАКТИРОВАТЬ : Вызов моей функции:
func peripheral(_ peripheral: CBPeripheral, didReadRSSI RSSI: NSNumber, error: Error?) {
print(RSSI)
peripheral.readRSSI()
RSSINb = Int(RSSI) * -1
updateLabel()
if (RSSINb > 150){
WriteValue(valeur: "z")
}
}
РЕДАКТИРОВАТЬ :
я отредактировал это @rmaddy
См. stackoverflow.com/questions/47066259/… и другие сообщения, связанные с ошибкой.





Задача решена:
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")
}
}
Покажите функцию, которая вызывает
updateLabel. Очевидно, вам нужно изменить его, чтобы он вызывался в основной очереди.