我正在编写我的第一个IOS应用程序,与Bluegiga BLE芯片进行通信。我需要读写值。我遇到的问题是,我第一次运行程序时无法写入值。我没有得到任何错误。它显示最后一个写为当前值的值。当我重新运行程序时,正确的值会正确更新。它推迟了我的项目。任何建议都会有很大帮助。我正在使用以下代码段。
CBPeripheral *servicePeripheral;
NSData *readIndex;
CBCharacteristic *readIdxCharacteristic;
[servicePeripheral writeValue:readIndex forCharacteristic:readIdxCharacteristic type:CBCharacteristicWriteWithResponse];
- (void) peripheral:(CBPeripheral *)peripheral didWriteValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{
if ([characteristic isEqual:readIdxCharacteristic] ){
[peripheral readValueForCharacteristic:readIdxCharacteristic];
NSLog(@"Read Index Characteristic Written Check%@",characteristic.value);
}
}
答案 0 :(得分:1)
您的问题是您在致电characteristic.value
后立即访问readValueForCharacteristic
,但Core-Bluetooth需要一些时间才能联系外围设备,请求特性值以及回复的外围。
如果您参考documentation for this method,您会看到 -
<强>讨论强>
当您调用此方法来读取a的值时 特点,外围称呼 peripheral:didUpdateValueForCharacteristic:error:方法 委托对象。如果特征值成功 检索后,您可以通过特征值来访问它 属性。
因此,您需要在characteristic.value
didUpdateValueForCharacteristic:
委托方法中访问CBPeripheral