2017-06-05 4 views
0

更新:私はサンプルプロジェクトをチェックしただけで、同じです。だから、これはバグかもしれません、またはこれは予想される動作です。特性のflatMap writeValueが返されないObservable

私はRxBluetoothKitを使用していますが、次の問題を把握することはできません。私は(私はCONCATでそれらの多くを書くことをしようとしている、それは素敵な作品)の特性を記述するために、このラッパー関数を抱えている:RxBluetoothKitドキュメント.flatMap { $0.writeValue }による

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) } 
} 

はで書くための最も簡単な方法の一つであります特性。実際にはreadValueでうまく動作し、このwriteValueであっても書き込みは成功し、それ以降はreadValueで読み返すと、oNext:ではcharacteristic.valueは正常です。

私の問題は、この関数がObservable<Characteristic>を返し、私の前提で書いた値を返すということでした。しかし、それは事実ではない、または少なくとも私のために働かない。それは私に前の値または無しを返すので、私はこれまでのところ、何が放出されたロジックであるのか分からなかった。Observable<Characteristic>。書かれた価値を取り戻すことができれば、本当にうれしいでしょう。私は間違って何をしていますか?

私も長い方法を試みたが、githubの上で述べたこれ:

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

onNext:コールバックで)放出された特性は、私がデバイスに書いたものではありません。それは前の1つまたはnilです。面白いのは、私がそれを読んでそれを書き込もうとすると、特性値が私が$0.readValueで読んだものになります。しかし、もし私が再コンパイルして、まったく新しいものを書いても、これまでと同じです。それはRxBluetoothKitが値をキャッシュしたようなものです。まったくわかりません。

これは、デバイスに問題がありますか? これはスレッドの問題なのでしょうか?

アドバイスやヒントは本当にありがたいです。

おかげで、応答の欠如のために申し訳ありません

答えて

0

ダニエルは、私はこれを気づきました。あなたの問題はまだ発生しますか?もしそうなら、Githubに問題を書いてください。それは、コアのBluetooth自体がどのように機能するかに関係しており、ドキュメントを改善する必要があるかもしれないので、問題としてそれを持つことは良いことです。あなたがしなければならないのは、値をもう一度読むことです。正しい値が表示されます。

関連する問題