ios – CoreBluetooth didWriteValueForCharacteristic返回旧值

连接到蓝牙设备后,我正在尝试通过调用以下方法为特征写入值:
[peripheral writeValue:data forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];

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

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

解决方法

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

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

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...