首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CoreBluetooth on iOS10: CBPeripheral discoverServices之后的超时

CoreBluetooth on iOS10: CBPeripheral discoverServices之后的超时
EN

Stack Overflow用户
提问于 2016-09-20 10:19:35
回答 2查看 2K关注 0票数 1

我们的应用程序通过CoreBluetooth连接到蓝牙设备。

在iOS 8和9上,一切都正常工作。在iOS 10上,我们得到一个超时错误(Error Domain=CBErrorDomain Code=6 "The connection has timed out unexpectedly.")

CBCentralManagerDelegate:

代码语言:javascript
复制
- (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)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-23 16:06:48

好吧,我解决了问题。我把CBUUIDNSUUID混为一谈

从iOS 10开始,CBPeripheral discoverServices只接受CBUUIDNSUUID不再工作了。也许NSUUID只是意外地在较旧的iOS版本上起作用。文件明确指出:

表示要发现的服务类型的CBUUID对象的列表。

代码语言:javascript
复制
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。

票数 4
EN

Stack Overflow用户

发布于 2016-09-20 18:56:32

确保在调用CBPeripheral之前不允许在CBCentralManagerDelegate中释放peripheral:didDiscoverServices:。这很容易通过将外围设备分配给属性来实现,例如:

代码语言:javascript
复制
@property (nonatomic, string) CBPeripheral *peripheral;

...

- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral {

  self.peripheral = peripheral
  [peripheral discoverServices:<desired service UUIDs>];
  ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39591564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档