而委托为nil或未实现外围设备:didDiscoverCharacteristicsForService:错误:(Corebluetooth,Swift)]

问题描述 投票:0回答:1
较早前,我在服务问题上也发布了与此类似的文章,并通过添加peripheral.delegate = self将其修复。

现在,当我尝试发现服务的特征时遇到了这个问题。

当委托为nil或未实现外围设备时:didDiscoverCharacteristicsForService:错误:

这是我的ViewController

import UIKit import CoreBluetooth let rowerServiceCBUUID = CBUUID(string: "CE060000-43E5-11E4-916C-0800200C9A66") class HRMViewController: UIViewController { @IBOutlet weak var heartRateLabel: UILabel! @IBOutlet weak var bodySensorLocationLabel: UILabel! var centralManager: CBCentralManager! var pmPeripheral: CBPeripheral! var wattValue: Int! override func viewDidLoad() { super.viewDidLoad() centralManager = CBCentralManager(delegate: self, queue: nil) // Make the digits monospaces to avoid shifting when the numbers change heartRateLabel.font = UIFont.monospacedDigitSystemFont(ofSize: heartRateLabel.font!.pointSize, weight: .regular) } func onHeartRateReceived(_ heartRate: Int) { heartRateLabel.text = String(heartRate) print("BPM: \(heartRate)") } } extension HRMViewController: CBCentralManagerDelegate { func centralManagerDidUpdateState(_ central: CBCentralManager) { switch central.state { case .unknown: print("central.state is .unknown") case .resetting: print("central.state is .resetting") case .unsupported: print("central.state is .unsupported") case .unauthorized: print("central.state is .unauthorized") case .poweredOff: print("central.state is .poweredOff") case .poweredOn: print("central.state is .poweredOn") centralManager.scanForPeripherals(withServices: [rowerServiceCBUUID]) @unknown default: break } } func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) { print(peripheral) peripheral.delegate = self pmPeripheral = peripheral pmPeripheral.delegate = self centralManager.stopScan() centralManager.connect(pmPeripheral!) } func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) { print("Connected!") pmPeripheral.discoverServices(nil) } } extension HRMViewController: CBPeripheralDelegate { func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) { guard let services = peripheral.services else { return } peripheral.delegate = self for service in services { print(service) print(service.characteristics ?? "characteristics are nil") peripheral.discoverCharacteristics(nil, for: service) } func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?){ peripheral.delegate = self guard let characteristics = service.characteristics else { return } for characteristic in characteristics { print(characteristic) } } } }

有人知道我应该怎么做吗?谢谢!

之前,我在服务发布问题上也发布了与此类似的帖子,并通过添加外围设备.delegate = self来解决它。现在,当我尝试发现...

ios swift xcode core-bluetooth swift5
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.