0

OSXアプリと初めて通信するときに新しいUUIDを生成するiOSアプリがあり、それが保存されます。このようにして、さまざまなデバイスにさまざまな特性識別子を持たせることができます。

通話後

peripheral.discoverCharacteristics([], forService: service as CBService)

OSX アプリの「didDiscoverServices」メソッドで、「didDiscoverCharacteristicsForService」で、新しいデバイスの UUID を調べようとしてこれを行います。以前に話したことがあるかどうかを確認し、そうでない場合は保存します。

for characteristic in service.characteristics {
    println("\(characteristic.UUIDString)")
}

問題は、代わりにcharacteristic.UUIDを使用すると、nilが出力されることです。「不明(<46c35c38 c4994106 b6d351c9 8d900368>)」が表示されます。これは、処理したい形式ではありません。

理由はありますか?

私が気付いたもう 1 つのことは、LightBlue で繰り返し説明したことをテストして、アプリが何を宣伝しているのかを確認した後、特定のサービス/特性が動かなくなって消えないように見えることがあるということです。電話を復元して、一度それらを取り除きます。これは正常ですか?

どうもありがとう

4

1 に答える 1

1

のドキュメントCBUUIDが間違っているようです。メソッドを参照していUUIDStringますが、コメントで指摘したように、認識されないセレクタ例外が発生します。

Swift と Objective C の両方のコードを試しました。

CBUUIDから返されたはCBMutableCharacteristic セレクターに応答しますが、明らかに発見プロセスからはUUIDString得られません。CBMutableCharacteristics

設計上の注意として、あなたのアプローチはおそらく最も効率的ではありません。おそらく、識別子 ( など) を含む既知の特性を持つ方がよいでしょうidentifierForVendor。そうすれば、特性の識別子ではなく、特性自体の内容を使用して、これが新しいデバイスであるかどうかを判断できます。

このようにして、「未知の」特性が識別子であると想定するのではなく、必要な特性のリストを送信して、discoverCharacteristicsより多くの「定義された」コードを書くことができます。

于 2014-09-08T00:33:54.503 に答える