2017-11-17 16 views
0

最近Swift 3からSwift 4、iOS 10.3.3からiOS 11.1にアップグレードされました。私はBLEを使って双方向に通信するアプリケーションを開発しています。次のようにワークフローは、次のとおりBLE周辺デリゲートが呼び出されていない

1)周辺 - CENTRAL)アイデンティティを受信する(プロセスそれ...)

3 - - アイデンティティ

2)CENTRAL宣伝周辺

4への対応)周辺 - Doneを中心

5)からの受信応答が

私のコードは、更新前に完璧に働いていたが、現在はそのではありません。

peripheral.writeValue(encryptedData!, for: characteristic, type: .withResponse) 

これは、次のデリゲートメソッドを呼び出す必要がありますが、それはしません:

public func peripheral(_ peripheral: CBPeripheral, didWriteValueFor descriptor: CBDescriptor, error: Error?) { 
     print("Did Write") 
     print("Error=\(error?.localizedDescription)") 
    } 

また、以下の(と呼んでいた)すべきステップ4の終わりに、私は次の行を実行します周辺デバイス上のデリゲートメソッドが、それはしません:次のように

public func peripheralManager(_ peripheral: CBPeripheralManager, didReceiveWrite requests: [CBATTRequest]) { 
     print("did receive write request") 
} 

サービスと特性が設定されています

let prefs = Preferences() 
      let strServiceUUID = prefs.GetString(key: Preferences.PREF_IDENTITY_SERVICE_UUID, defaultVal: "")! 
      let strCharacteristicUUID = prefs.GetString(key: Preferences.PREF_IDENTITY_CHARACTERISTIC_UUID, defaultVal: "")! 
      print("ServiceUUID=\(strServiceUUID)") 
      print("CharacteristicUUID=\(strCharacteristicUUID)") 
      mServiceUUID = CBUUID(string: strServiceUUID) 
      mCharacterUUID = CBUUID(string: strCharacteristicUUID) 
      mCBBluetoothServices = CBMutableService(type: mServiceUUID, primary: true) 

      //lets configure the data we want to advertise for 
      var characteristics : [CBCharacteristic] = [] 

      //let strData : String = "933911" 
      //let data = strData.data(using: .utf8) 
      let cbProperties: CBCharacteristicProperties = [.read, .write, .notify] 
      let cbPermissions: CBAttributePermissions = [.readable, .writeable] 
      mIdentityObjectCharacteristic = CBMutableCharacteristic(type: mCharacterUUID, 
                    properties: cbProperties, 
                    value: nil, 
                    permissions: cbPermissions) 


      characteristics.append(mIdentityObjectCharacteristic) 
      mCBBluetoothServices.characteristics = characteristics 
      mCBPeripheralManager.add(mCBBluetoothServices) 

答えて

0

OSとSwiftのバージョンをアップグレードするとコードが壊れるのはなぜ分かりませんが、間違ったデリゲートメソッドを使用しているようですね。

更新特性の任意の種類(例:読み取り/書き込み特性)場合スウィフトこの

func peripheral(CBPeripheral, didWriteValueFor: CBDescriptor, error: Error?) 
+0

私はそれを正しいデリゲートメソッドに変更しましたが、peripheral.writeValue(encryptedData !, for:characteristics、type:.withResponse)を呼び出すと、まだトラップしません。 – Paul

+0

これは残念です。実際に接続されていること、すべての権限を持っていること、BLEが有効になっていることなどを確認していますか? iOSにアップグレードした後、特にiPhone 5などの古い電話機にアップグレードした後、BLE接続に関する問題が発生しました。コードをもう少し投稿すれば、私は比較し、サメの問題を見ているかどうかを見ることができます。 – sammedeta

0

の代わりにこの

func peripheral(CBPeripheral, didWriteValueFor: CBCharacteristic, error: Error?) 

を使用してみてください。 それから 'didUpdateValueFor'デリゲートが呼び出されました。 まず、委任方法の下にチェックインしてください。

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) { 

    print("didUpdateValueForChar", characteristic) 

    if let error1 = error{ 

     alertMSG(titleString: "Error", subTitleString: "Found error while read characteristic data, Plase try again", buttonTitle: "OK") 

     print(error1) 
    } 
    else{ 

     print("Update Characteristic: ", characteristic) 
    } 
} 

func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) { 

    print("Write Characteristic :", characteristic) 
} 
関連する問題