#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