1

我们的应用程序通过 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;

在调用discoverServices连接的CBPeripheral.

有谁知道出了什么问题?这是 iOS 10 的问题吗?是否有特定的 BLE 日志要检查?

使用 Nordic Semiconductor nRF51822 在 iPad Pro 9.7 上设置 iOS 10.0.1 (14A403)

4

2 回答 2

4

好的,我解决了问题。我混淆CBUUIDNSUUID
从 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-23T16:06:48.050 回答
0

确保CBPeripheral在. peripheral:didDiscoverServices:_ CBCentralManagerDelegate这很容易通过将外围设备分配给一个属性来完成,例如:

@property (nonatomic, string) CBPeripheral *peripheral;

...

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

  self.peripheral = peripheral
  [peripheral discoverServices:<desired service UUIDs>];
  ...
}
于 2016-09-20T18:56:32.793 回答