2017-06-05 36 views
0

更新:我只是检查他们的榜样项目和它是一样的。所以,这可能是一个错误,或者这是预期的行为。flatMap writeValue的特点不返回可观察

我使用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>和我的假设是,它会给我回写入值。但事实并非如此,或者至少它不适合我。它给了我以前的值或零,我不知道到目前为止,发射的Observable<Characteristic>逻辑是什么。如果我能取回书面价值,这将是非常好的。我究竟做错了什么?

我甚至试图越长的方式,而这一次,在github提到:

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

所发射特性(在onNext:回调)不是一个我写到该设备。这是前一个或零。有趣的是,如果我试图读回来,然后写,特性值将是我已阅读$0.readValue。但如果我重新编译,写一个全新的,它仍然是我以前读过的。这就像RxBluetoothKit缓存了一个值,或者我不知道。

可这是与BLE装置出了问题? 也许这是一个线程问题或类似的东西?

我真的很感激任何建议或暗示的。

感谢,

丹尼尔

回答

0

对不起,我毫无反应,我刚刚注意到这一点。你的问题是否仍然存在?如果是这样 - 请在我们的Github上写一个问题。它与Core Bluetooth本身的工作方式有关,我们也许应该改进我们的文档,所以最好将它作为一个问题。你应该做的是再次读取值 - 它会显示正确的值。