更新:私はサンプルプロジェクトをチェックしただけで、同じです。だから、これはバグかもしれません、またはこれは予想される動作です。特性の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が値をキャッシュしたようなものです。まったくわかりません。
これは、デバイスに問題がありますか? これはスレッドの問題なのでしょうか?
アドバイスやヒントは本当にありがたいです。
おかげで、応答の欠如のために申し訳ありません