更新:我只是检查了他们的示例项目,它是相同的。因此,这可能是一个错误,或者这是预期的行为。

我正在使用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.valueoNext:中就可以了。

我的问题是该函数返回一个Observable<Characteristic>,而我的假设是它将给我返回书面价值。但这不是事实,或者至少对我不起作用。它给了我以前的值或nil,到目前为止我还不能弄清楚发出的Observable<Characteristic>的逻辑是什么。如果我能取回书面价值,那将是非常好的。我究竟做错了什么?

我什至尝试了更长的方法,在github上提到了这一方法:

characteristic.writeValue(data, type: .withResponse)
.subscribe { event in
    //respond to errors / successful read
}


发出的特征(在onNext:回调中)不是我写入设备的特征。这是前一个或零。有趣的是,如果我尝试将其读回,然后再写,那么character.value将是我使用$0.readValue读取的那个。但是,如果我重新编译,请写一个全新的书,它仍然和我以前读过的一样。就像RxBluetoothKit缓存了一个值,或者我什么都不知道。

ble设备会出现问题吗?
也许是线程问题之类的?

我真的很感谢任何建议或提示。

谢谢,

丹尼尔

最佳答案

抱歉,没有回复,我注意到了这一点。您的问题仍然存在吗?如果是这样,请在我们的Github上写一个问题。它与Core Bluetooth本身的工作方式有关,我们也许应该改进我们的文档,所以将它作为一个问题将是很好的。您应该做的是再次读取该值-然后它将显示正确的值。

10-08 05:50