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