2017-07-14 4 views
0

別のデバイスで実行される2つのプログラムをCoreBluetooth搭載のBluetooth経由でお互いに通信させようとしています。私はマネージャから周辺機器を見つけて接続することができ、接続された周辺機器でサービスをブラウズすることができますが、特性を試してみると、エラーThe specified UUID is not allowed for this operation.が発生し、サービスの特性はゼロになります。UUID peripherial didDiscoverCharacteristicsforサービスでは使用できません

これはどういう意味ですか?私はターゲットのUUIDを指定して特性を見つけようとしましたが、どちらもこのエラーを示していません。

これは、エラーを出力する機能です。

func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) { 
    print(error.localizedDescription)//prints "The specified UUID is not allowed for this operation." 
    if service.characteristics != nil { 
     for characteristic in service.characteristics! { 
      if characteristic.uuid == CBUUID(string: "A4389A32-90D2-402F-A3DF-47996E123DC1") { 
       print("characteristic found") 
       peripheral.readValue(for: characteristic) 
      } 
     } 
    } 
} 

これは私が周辺機器を探す場所です。

これは、他のデバイスにサービス特性を追加する方法です。

service = CBMutableService(type: CBUUID(string:"dc495108-adce-4915-942d-bfc19cea923f"), primary: true) 
characteristic = CBMutableCharacteristic(type: CBUUID(string: "A4389A32-90D2-402F-A3DF-47996E123DC1"), properties: .write, value: nil, permissions: .writeable) 
service.characteristics = [characteristic] 

Iは、(.readable/.readを含む)の特性と権限の異なる組み合わせの数を試みたと私は同じエラーを取得します。

+0

あなたは書き込み専用のため、あなたがしようとしたときにエラーが出るように設定している特性を読み取ろうとしていますそれを読んでください。 – Paulw11

+0

意味がありますが、読み書き可能にするにはどうすればよいですか?また、プロパティを.read、およびpermissionsに変更し、.readableに変更しても何も変更されません。 – C1FR1

答えて

0

書き込み専用として設定した特性の値を読み取ろうとしているため、Core Bluetoothによってエラーが発生します。 読み取り操作は、指定された特性に対して無効です。

あなたの特性が両方読めるよう、あなたはこれを指定する必要が書き込み可能にする場合:

service = CBMutableService(type: CBUUID(string:"dc495108-adce-4915-942d-bfc19cea923f"), primary: true) 
let characteristic = CBMutableCharacteristic(type: CBUUID(string: "A4389A32-90D2-402F-A3DF-47996E123DC1"), properties: [.write, .read], value: nil, permissions: [.writeable, .readable]) 
service.characteristics = [characteristic] 
+0

私はすでにこれを試して、助けていない。 – C1FR1

+0

エラーはどこから印刷されていますか?私はちょうどあなたのコードを使用するテストアプリケーションを作成し、それは正常に動作します。ここに私の2つのView Controllerがあります - 最初のものは中央です、もう1つは周辺機器ですhttps://gist.github.com/paulw11/5d734957ddd575f9d00c758926984e76 – Paulw11

+0

エラーは 'didDiscoverCharacteristicsFor service'関数からのものです。 。私はあなたのテストアプリケーションを見渡し、別の方法でペリフェラルを探しました(おそらくもっと良い方法かもしれません)ので、それをコピーして問題を修正しました。一旦接続されると、中央は 'didDiscoverCharacteristicsFor'関数を数回実行します。時にはエラーがあり、そうでなければ、特性はゼロになります。もう一度実行され、 'NSArray要素がSwift配列要素型と一致しなかったことを示すfor文でクラッシュします。 – C1FR1

関連する問題