在我的应用中,我需要将数据写入外设的可写特性。我可以通过扫描外设,检测和连接外设,发现服务,发现特征然后最终写入目标特征来完成此任务。
完成所有这些后,我保留了我感兴趣的CBPheripheral和CBC特性的参考。现在,下次,我试图直接写入保存的外设和特性。但我得到了蓝牙警告。如果我们尚未与它断开连接,我们不能直接写入外设特性吗?
BTBeaconTest [1421:60b] CoreBluetooth [警告]不是有效的外围设备
[iPeripheral writeValue:dataToWrite forCharacteristic:iCharacterstic type:CBCharacteristicWriteWithResponse];
PS:我没有断开与外围设备的连接。
答案 0 :(得分:1)
很可能蓝牙堆栈已被重置或由于某些其他原因导致外围设备无效。您需要监控状态更新,如果您收到OFF
或RESETTING
,则会使所有句柄与外围设备和特征无效。通常,最好只保留对外设的引用,并在需要时查找特性。 CoreBluetooth将为您缓存它们,因此查找速度非常快。这个答案告诉你如何做到这一点:https://stackoverflow.com/a/18091617/768935