我们的应用程序通过CoreBluetooth连接到蓝牙设备。
在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;在连接的discoverServices上调用CBPeripheral之后。
有人知道出了什么问题吗?这是iOS 10的问题吗?是否有特定的BLE日志要检查?
用北欧半导体iOS在iPad Pro 9.7上安装nRF51822 10.0.1 (14A 403)
发布于 2016-09-23 16:06:48
好吧,我解决了问题。我把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。
发布于 2016-09-20 18:56:32
确保在调用CBPeripheral之前不允许在CBCentralManagerDelegate中释放peripheral:didDiscoverServices:。这很容易通过将外围设备分配给属性来实现,例如:
@property (nonatomic, string) CBPeripheral *peripheral;
...
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral {
self.peripheral = peripheral
[peripheral discoverServices:<desired service UUIDs>];
...
}https://stackoverflow.com/questions/39591564
复制相似问题