2012-11-26 7 views
5

私のCoreBluetoothアプリケーションは、クライアント特性設定記述子で「表示ビット」を有効にする必要があります。ここに私がやったことです:CoreBluetooth writeValue:forDescriptor:issue

  1. スタート
  2. スタートをスキャンするために、コールバック

    内のデバイス

  3. コールdiscoverServices
  4. コールdiscoverCharacteristicsに接続するために - 周辺機器(無効):(CBPeripheral *)周辺機器発見サービス:(NSError *)エラー

  5. コールdiscoverDescriptorsForCharacteristic callb ackを

    - (無効)周辺:(CBPeripheral *)周辺didDiscoverCharacteristicsForService:(CBService *)サービスエラー:(NSError *)エラーコールバックインサイド

  6. - (無効)周辺:(CBPeripheral * )周辺didDiscoverDescriptorsForCharacteristic:(CBCharacteristic *)特性誤差:(NSError *)エラー

は、私が呼ばれる:

 if ([[descriptor.UUID representativeString] isEqualToString:@"2902" ]) 
     { 
      const unsigned char raw_data[] = {0x02}; 
      NSData *myData = [NSData dataWithBytes: raw_data length: 2]; 
      [self.cBCP writeValue:myData forDescriptor:descriptor]; 
     } 

しかし、私のアプリはwriteVale:でクラッシュします。コンソールのエラーメッセージは次のとおりです。

Cannot write Client Characteristic Configuration descriptors using this method!

ありがとう

+1

writeValeを使用して、任意のサンプルコードがある場合、私は思ったんだけど:forDescriptor。 –

+0

実際に私のソリューションはwriteValue:forDescriptorを使用していません。 –

+0

writeValue:forDescriptorを使用せずに表示を有効にする方法を説明できますか?私は同じ場所で立ち往生しています... – imcc

答えて

-1

問題は、writeValue:forDescriptor:メソッドを使用して、クライアント構成記述子(UUID = 2902)の値を書き込むことができないことです。

代わりに、CBPeripheralクラスのsetNotifyValue:forCharacteristic:メソッドを使用して、サーバー上の特性値のクライアント指示または通知を構成する必要があります。

0

かなり古い質問が、方法setNotifyValue(_:for:)があなたのために、それが下のcharcateristicsの特性に依存することを処理する場合、のように思えるそれは答えなかったため。

  • のみ通知:通知が有効になります。
  • 表示のみ:表示が有効になります。
  • 表示&通知:のみ通知が有効になります。

したがって、表示を有効にする必要がある場合、特性には標識プロパティのみが必要であり、通知は削除する必要があります。

私が推測する主な理由は、表示がずっと遅くなるため、iOSは表示する必要がある場合を除き、常に最速のオプションを優先します。

Read more on the Apple docs

関連する問題