CoreBluetooth在重新连接时不会发现服务

我们有一个与我们自己的BLE设备通信的应用程序。 当我们推送新固件时,我们重新启动并获得centralManager: didDisconnectPeripheral: error:centralManager: didConnectPeripheral:但是当我们调用[peripheral discoverServices:nil]我们永远不会得到peripheral: didDiscoverServices:的回调peripheral: didDiscoverServices: . 我们在最初连接时得到它,但在重新连接时却没有。 CoreBluetooth似乎知道服务和特性是什么,因为我们可以与设备进行交互,但我们希望能够在重启后立即编写特性,但无法找到可靠的方法来判断它是什么时候。

– = EDIT = – 这是我们用于编写特征的代码。 当我们在第二次调用didConnect时尝试调用它时,它会失败,因为外围设备没有任何服务:

 +(void)writeData:(NSData*)data toPeripheral:(CBPeripheral*)peripheral service:(NSString*)sCBUUID characteristic:(NSString*)cCBUUID { // Sends data to BLE peripheral to process HID and send EHIF command to PC for(CBService *service in peripheral.services) { if([service.UUID.stringValue isEqualToString:sCBUUID]) { for(CBCharacteristic *characteristic in service.characteristics) { if([characteristic.UUID.stringValue isEqualToString:cCBUUID]) { /* EVERYTHING IS FOUND, WRITE characteristic ! */ [peripheral writeValue:data forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse]; return; } } } } } 

我记得在我使用CoreBluetooth的工作中,这种行为是有意的,因为它是以这种方式记录的。 断开连接后,我们不应重用相同的外围设备实例。 相反,我们应该要求CBCentralManager使用其已知的外设UUID为我们提供一个新的CBPeripheral。 另请参见: CBCentralManager.retrievePeripheralsWithIdentifiers: