CoreBluetooth didWriteValueForCharacteristic返回旧值

时间:2014-03-27 20:54:57

标签: ios bluetooth core-bluetooth

连接到蓝牙设备后,我正试图通过调用:

为特征写一个值
[peripheral writeValue:data forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];

正在调用正确的回调(外围设备:didWriteValueForCharacteristic:error :)但是当我从特征中查看数据时,似乎旧数据持久存在于characteristic.value中。但是,当我断开连接并重新连接到设备时,会显示新数据。这仅发生在iOS 7上。

当我将呼叫发送到外围设备时,有什么东西可能会丢失吗?

1 个答案:

答案 0 :(得分:8)

您看到的行为是正确的。 didWriteValueForCharacteristic方法确认已写入特征,但外围设备本身是特征值的“保管者”。核心蓝牙在从外围设备检索之前不会有新的价值,无论是响应读取请求还是通知,如果您已经订阅了该特性。

从您的评论看来,旧行为似乎是“短路”过程并立即暴露新值 - 这很危险,因为外围设备可能会对特性进行其他更新,因此您不应该依赖没有执行读取的数据。