[英]CoreBluetooth on iOS10: Timeout after CBPeripheral discoverServices
我们的应用程序通过CoreBluetooth连接蓝牙LE设备。
在iOS 8和9上,一切正常。 在iOS 10上,我们发现超时错误( Error Domain=CBErrorDomain Code=6 "The connection has timed out unexpectedly."
)
在CBCentralManagerDelegate:
- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(nullable NSError *)error;
在连接的CBPeripheral
上调用discoverServices
之后。
有谁知道什么出错了? 这是iOS 10问题吗? 是否有某个BLE日志需要检查?
使用Nordic Semiconductor nRF51822在iPad Pro 9.7上安装iOS 10.0.1(14A403)
好的,我解决了问题。 我混淆了CBUUID
和NSUUID
从iOS 10开始CBPeripheral discoverServices
只接受CBUUID
。 NSUUID
不再起作用了。 也许NSUUID
只是在较旧的iOS版本上偶然工作。 文件明确指出:
表示要发现的服务类型的
CBUUID
对象列表。
NSArray *services = @[
[CBUUID UUIDWithString:ServiceUUID] //Correct
//[[NSUUID alloc] initWithUUIDString:ServiceUUID] //Does work on iOS 9 but not on iOS 10
];
[self.peripheral discoverServices:services];
期待将应用程序移植到强类型Swift。
请确保您不允许CBPeripheral
之前被释放peripheral:didDiscoverServices:
叫你CBCentralManagerDelegate
。 这可以通过将外围设备分配给属性来轻松完成,例如:
@property (nonatomic, string) CBPeripheral *peripheral;
...
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral {
self.peripheral = peripheral
[peripheral discoverServices:<desired service UUIDs>];
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.