2017-01-23 14 views
0

私は客観的なCプログラミングにはかなり新しいので、これは非常に単純な質問であれば申し訳ありません。ObjectiveC:特定の順序で特性を読み取る

私は、Bluetooth経由で周辺機器に接続しており、特定の順序で機器の特性を読み取ることができるようにしたいと考えています。 1つの特性から戻される値は、次に読み取る特性を決定します。私は、コード

[peripheral discoverCharacteristics:@[[CBUUID UUIDWithString:MyUUID_1]] forService:service]; 

を使用して、新しい特性を発見した場合

現在、私は正しく特性を発見することができ、その値を読み取ることができます。私の問題は、最初のcharacterisiticの発見に続いて、上記と同じコードを使用して、しかしMyUUID_2で2番目の特性を発見しようとすると関係します。 didDiscoverCharacteristicsForService方法は、サービスと呼ばれる

両方MyUUID_1MyUUID_2特性を有しています。したがって、メソッド内でifループをループすると、最初の特性が再び使用されます。

特性のみがdidDiscoverCharacteristicsForService内ループスルーするよう、サービスから発見された特性をクリアする方法はありますがdiscoverCharacteristics

答えて

0

アイデアのコールが希望と呼ばれる特徴的な以下の通りです:特性を読み書きできるようにするには、有効のインスタンスがCBServiceCBCharacteristicである必要があります。

discoverServicesdiscoverCharacteristicsメソッドを呼び出すと、CBServiceCBCharacteristicsのインスタンスが返されます。周辺機器の接続が切断されるまで、これらのインスタンスに頼ることができます(別名有効と見なします)。したがって特性が見つかったら、その値を参照してコールバック以外の値を読み書きすることができますdidDiscoverCharacteristicsForService:

特性を定義済みの順序で読み取るには、まず2つのステップ:

  1. サービスに興味のあるすべての特徴を発見してください。
  2. これらの特性がすべて検出されたら、最初のものを読んで答えを待ちます。
  3. 次に、もう1つを読んで答えを待ちます。それを行うには

一つの方法は、NSOperations内部にこれらのステップをラップすることです、あなたはあなたを助けるか、使用する新しいデリゲートプロトコルを作成することができます「NSNotificationCenter」

@protocol MyBLEProtocol <NSObject> 
- (void) didFinishReadFirstCharacteristic; 
- (void) didFinishReadSecondCharacteristic; 
@end 
+0

お返事のために、とのための多くのおかげでそうすることで速度。 サービスを検出して、discoverCharacteristicsコールを使用して必要なすべての特性を検出する必要があることを意味しますか。コールバックdidDiscoverCharacteristicsForServiceの内部では、私が望む順番でそれらを読んでいますか? –

+0

「didDiscoverCharacteristicsForService」内の特性を必ずしも読み込む必要はありません。委任またはNSOperationsを使用してすべてをラップすることができます。私は最初の投稿を更新しようとします。 – yageek

+0

私の問題は、2番目の時間がFFF5 - > FFF3 - > FFF2の間に、呼び出しがFFF1 - > FFF2 - > FFF3であるということです。 –

関連する問題