3

2 つの iOS デバイス (両方とも 6.1.4) でアプリを実行しており、1 つのデバイスがセントラルとして機能し、もう 1 つがペリフェラルとして機能します。

Peripheral から Central への通知 (通知するように設定された特性) の取得に成功しました。

ただし、セントラルからペリフェラルへの値を特定の書き込み可能な特性に書き込みたいと思っていましたが、それは常に失敗します。

デリゲートのperipheral:didWriteValueForCharacteristic:error:メソッドは、エラーの説明にある場所ですぐに呼び出されます。

「1 つ以上のパラメーターが無効でした」

手がかりを求めてネットを検索していますが、何が問題なのかまだわかりません。

これは、ペリフェラル側の特性をセットアップする方法です。

[[CBMutableCharacteristic alloc] initWithType:<My CBUUID> properties:CBCharacteristicPropertyWrite value:nil permissions:0];

Central 側で特性を発見すると、書き込み可能な特性がそこにあることがわかります。その時点で、後で値を書き込むときに使用しようとする参照を保存します。私が書いている値は、次のように NSData に変換する単なるテキスト文字列です。

NSString *payloadMessage = @"Hello";
NSData *payload = [payloadMessage dataUsingEncoding:NSUTF8StringEncoding];
[peripheral writeValue:payload forCharacteristic:<myCharacteristic> type:CBCharacteristicWriteWithResponse];

私が見ることができる唯一の奇妙なことは、私の特性のプロパティが 138 に設定されていることです。それが CoreBluetooth フレームワークによって自動的に追加される理由がわかりません。それが重要かどうかわからない。

送信しようとしている特性またはデータに問題があるようですが、私の人生ではそれを理解できません。誰かに提案やアイデアがあれば、助けていただければ幸いです

4

3 に答える 3

3

DiscoverCharacteristics:forService: で CBUUID の代わりに誤って文字列の配列を指定したときに、同じエラーが発生しました。

正しくない:

[peripheral discoverCharacteristics:@[NOTIFY_CHARACTERISTIC_UUID, WRITE_WO_RESPONSE_CHARACTERISTIC_UUID]
                         forService:service];

正しい:

[peripheral discoverCharacteristics:@[[CBUUID UUIDWithString:NOTIFY_CHARACTERISTIC_UUID],
                                      [CBUUID UUIDWithString:WRITE_WO_RESPONSE_CHARACTERISTIC_UUID]]
                         forService:service]; 
于 2013-09-17T09:29:58.050 に答える