问题描述
[CoreBluetooth] API MISUSE: <CBPeripheral: 0x281310820,identifier = 75450BB1-97A7-5648-38FD-B27572F19EDD,name = ESP32 test,state = disconnected> can only accept commands while in the connected state
peripheral.discoverServices([CBUUID(string: "4fafc201-1fb5-459e-8fcc-c5c9c331914b")])
有人知道发生了什么吗?
这是 diddiscover 委托:
func centralManager(_ central: CBCentralManager,diddiscover peripheral: CBPeripheral,advertisementData: [String : Any],RSSi RSSI: NSNumber) {
var peripheralName: String!
if let name = advertisementData[CBAdvertisementDataLocalNameKey] as? String {
peripheralName = name
}
else {
peripheralName = "UnkNown"
}
if(advertisementData[CBAdvertisementDataServiceUUIDsKey] != nil) {
//print(advertisementData)
let Ids: [CBUUID] = advertisementData[CBAdvertisementDataServiceUUIDsKey] as! [CBUUID]
if(Ids.count == 1) {
print(Ids[0])
let newPeripheral = Peripheral(id: peripherals.count,name: peripheralName,RSSi: RSSI.intValue)
//print(newPeripheral)
/*
if let services = peripheral.services {
for service in services {
print("servizio")
//peripheral.discovercharacteristics([CBUUID(string: "4fafc201-1fb5-459e-8fcc-c5c9c331914b")],for: service)
}
}*/
if(accepted_services.contains(Ids[0].uuidString)) {
print(newPeripheral)
peripherals.append(newPeripheral)
peripheral.delegate = self
peripheral.discoverServices([CBUUID(string: "4fafc201-1fb5-459e-8fcc-c5c9c331914b")])
//peripheral.discovercharacteristics([CBUUID(string: "beb5483e-36e1-4688-b7f5-ea07361b26a8")],for: <#CBService#>)
}
}
}
}
[CoreBluetooth] API MISUSE: Cancelling connection for unused peripheral <CBPeripheral: 0x2829e01e0,state = connecting>,Did you forget to keep a reference to it?
这是实际代码:
func centralManager(_ central: CBCentralManager,advertisementData: [String:Any],RSSi RSSI: NSNumber) {
print("scoperto peripheral")
myCentral.connect(peripheral,options: nil)
}
这是什么意思?
解决方法
您负责在某处保存对 CBPeripheral 的引用。这就是消息告诉您的内容(“您是否忘记保留对它的引用?”)您正在创建一个 Peripheral
(我假设它是一个自定义结构或类),但它只有名称,不是 CBPeripheral。这意味着在 didDiscover
的末尾,CBPeripheral 没有被任何东西引用,而是被释放了。