我对CBMutableCharacteristic的特征值可以保留多长时间感到困惑。如果我有一个归档的对象数组,可以将特征的值设置为此归档数组吗?还是我最好为数组中的每个存档对象都设置一个单独的特征?

最佳答案

该规范将特征值的最大长度限制为512个八位位组(蓝牙规范V4.0第3卷,F部分3.2.9)。在中央,您使用readValueForCharacteristic: API发出读取请求。然后在外围设备上,您将收到相应的回调:

CBMutableCharacteristic *characteristic = // the characteristic with long data

- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveReadRequest:(CBATTRequest *)request {
  // Ensure offset is in the valid range
  if (request.offset > characteristic.value.length) {
   // respond with error
   [self.peripheralManager respondToRequest:request withResult:CBATTErrorInvalidOffset];
   return;
  }

  NSRange range = NSMakeRange(request.offset, characteristic.value.length - request.offset);
  request.value = [characteristic.value subdataWithRange:range];

  [self.peripheralManager respondToRequest:request withResult:CBATTErrorSuccess];
}

只要响应不小于最大可传输单元(MTU),就会使用增加的offset值来调用该回调。 MTU由系统协商,您无法提前查询。因此,将range设置为一直扩展到数据长度,以便系统可以确定要发送到中央的数据量。默认情况下为20,但iOS 7进行了一些调整,以实现更大的尺寸。观看WWDC视频以获取更多详细信息。

通过此信息,您应该能够找到一种公开数据的方法。请记住,您拥有的服务和特性越多,发现所需的时间就越长。使用长读取和长写入只是一种方便。

关于ios - CoreBluetooth特性值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20852558/

10-08 21:05