Делегат CBPeripheral не работает в классе NSObject swift

#ios #swift #core-bluetooth #cbperipheral

Вопрос:

Я пытаюсь использовать подключенное периферийное устройство с CBCentralManager в NSObject, но оно не вызывает методы CBPeripheralDelegate, но работает в UIViewController. Пожалуйста, проверьте мой код ниже.

 class PPG : NSObject, CBPeripheralDelegate {    var ppgPeripheral : CBPeripheral!  var ppgChar : CBCharacteristic!    init(ppgPeripheral: CBPeripheral) {  super.init()    self.ppgPeripheral = ppgPeripheral  self.ppgPeripheral.delegate = self      }    func discoverServices(){  self.ppgPeripheral.discoverServices(nil)  }        func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {      if let error = error {  print("Error discovering services: (error.localizedDescription)")  return  }  if let foundServices = peripheral.services{    print("services found")    }    }      }  

Вызов вышеупомянутого класса

 let ppg = PPG(ppgPeripheral: ppgPeripheral) ppg.discoverServices()  

Комментарии:

1. Вы не показываете контекст последнего фрагмента кода, но, предположительно, он находится в какой-то функции. Если вы не сохраните PPG экземпляр в свойстве, он будет выпущен, как только эта функция завершит работу, поскольку это всего лишь локальная переменная и других ссылок нет. Этот выпуск произойдет до завершения операции Bluetooth