更新:我刚检查了他们的示例项目,它们是一样的。所以,它可能是一个错误,或者这是预期的行为。
我正在使用RxBluetoothKit,无法弄清楚以下问题。我正在使用这个包装函数来编写一个特性(我试图用concat编写许多函数,它很好用):
func writeCharacteristicData(for peripheral: Peripheral, characteristicIdentifier: CharacteristicIdentifier, value: Data?) -> Observable<Characteristic> {
guard let value = value else {
return Observable.error(BTError.noDataProvided(description: "Missing value for: \(characteristicIdentifier)"))
}
return peripheral
.connect()
.flatMap { $0.writeValue(value,
for: characteristicIdentifier,
type: .withResponse) }
}
根据RxBluetoothKit文档.flatMap { $0.writeValue }
是写入特征的最简单方法之一。实际上它与readValue
一样正常,即使使用此writeValue
,写入也是成功的,如果我之后用readValue读回来,characteristic.value
在oNext:
中就可以了}。
我的问题是这个函数返回Observable<Characteristic>
,我的假设是它会给我回写书面值。但事实并非如此,或者至少它对我不起作用。它给了我以前的值或者nil,到目前为止我无法弄清楚发出的Observable<Characteristic>
的逻辑是什么。如果我可以取回书面价值,那将是非常好的。我做错了什么?
我甚至尝试了更长的方法,这个在github上提到:
characteristic.writeValue(data, type: .withResponse)
.subscribe { event in
//respond to errors / successful read
}
发出的特征(在onNext:
回调中)不是我写给设备的那个。这是前一个或零。有趣的是,如果我尝试回读它,然后写,那个特征值将是我用$0.readValue
读过的那个。但如果我重新编译,写一个全新的,它仍然是我以前读过的。这就像RxBluetoothKit缓存了一个值,或者我完全不知道。
这可能是ble设备的问题吗? 也许这是一个线程问题或类似的东西?
我真的很感激任何建议或提示。
谢谢,
丹尼尔
答案 0 :(得分:0)
很抱歉没有回复,我刚才注意到了这一点。你的问题仍然存在吗?如果是这样 - 请在我们的Github上写一个问题。它与Core Bluetooth本身的工作方式有关,我们也许应该改进我们的文档,因此将它作为一个问题是好的。你应该做的是再次读取值 - 它将显示正确的值。