2016-06-25 4 views
2

Meine Peripherie wirbt eine ServiceUUID als Teil der advertisementData. Ich möchte die angepriesene Dienst-UUID ohne Verbindung. Hier ist mein Code:Der Versuch, beworbene Dienst-UUID aus BLE-Werbung zu extrahierenDaten

func centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData: [String : AnyObject], RSSI: NSNumber) { 

     peripherals.append(peripheral) 

     let serviceUUID = [advertisementData: CBAdvertisementDataServiceUUIDsKey] 

     print(serviceUUID) 
    } 

Wenn mein Code ausgeführt sehe ich in der Konsole:

{ 
     { 
     kCBAdvDataIsConnectable = 1; 
     kCBAdvDataLocalName = "sensor ID not set up yet"; 
     kCBAdvDataServiceUUIDs =   (
      "926D74A0-D820-1000-8000-00805F9B34FB" 
     ); 
    } = kCBAdvDataServiceUUIDs; 
} 

Ich bin nach dem "926D74A0-D820-1000-8000-00805F9B34FB". Irgendwelche Ideen wie man es bekommt? Vielen Dank.

Antwort

0

Nun, es gibt einen kleinen Fehler in Ihrem Code.

let serviceUUID = [advertisementData: CBAdvertisementDataServiceUUIDsKey] erstellt im Grunde ein neues Wörterbuch mit einem einzigen Schlüssel-Wert-Paar. Der Schlüssel ist das ursprüngliche advertisementData Wörterbuch und der entsprechende Wert ist CBAdvertisementDataServiceUUIDsKey - was Sie in Ihrem Protokoll sehen.

Was Sie tun möchten, ist:

let serviceUUID = advertisementData[CBAdvertisementDataServiceUUIDsKey]

Hoffnung, das hilft!

+0

Vielen Dank, Jens –

0

Sie stellen eine gute Frage, denn das ist ein echter Schwachpunkt: kryptische Ausgabe im Debugger an der Kreuzung Swift/Obj-C. Das tatsächliche Problem ist, dass der von advertisementData[CBAdvertisementDataServiceUUIDsKey] zurückgegebene Wert NSArray ist. Wie soll ich wissen?

(lldb) po advertisementData 
▿ 2 elements 
    ▿ 0 : 2 elements 
    - key : "kCBAdvDataIsConnectable" 
    - value : 1 
    ▿ 1 : 2 elements 
    - key : "kCBAdvDataServiceUUIDs" 
    ▿ value : 1 element 
     - 0 : 926D74A0-D820-1000-8000-00805F9B34FB 

(lldb) po advertisementData[CBAdvertisementDataServiceUUIDsKey] 
▿ Optional<Any> 
    ▿ some : 1 element 
    - 0 : 926D74A0-D820-1000-8000-00805F9B34FB 

OK, also sehen wir, es ist optional. Fügen Sie !10 hinzu:

(lldb) po advertisementData[CBAdvertisementDataServiceUUIDsKey]! 
▿ 1 element 
    - 0 : 926D74A0-D820-1000-8000-00805F9B34FB 

Und wir sind zurück, wo wir angefangen haben. Was zur Hölle ist das? Verwenden Sie type(of:):

(lldb) po type(of:advertisementData[CBAdvertisementDataServiceUUIDsKey]!) 
__NSArrayM 

Das kryptische Art means NSMutableArray. Also müssen wir die Ausgabe an NSArray und Index des Arrays werfen:

(lldb) po advertisementData[CBAdvertisementDataServiceUUIDsKey]! as! NSArray 
▿ 1 element 
    - 0 : 926D74A0-D820-1000-8000-00805F9B34FB 

(lldb) po (advertisementData[CBAdvertisementDataServiceUUIDsKey]! as! NSArray)[0] 
926D74A0-D820-1000-8000-00805F9B34FB 

Was ist der Typ?

(lldb) po type(of:(advertisementData[CBAdvertisementDataServiceUUIDsKey]! as! NSArray)[0]) 
CBUUID 

OK so haben wir eine CBUUID bekam. Wir sind fertig:

(lldb) po ((advertisementData[CBAdvertisementDataServiceUUIDsKey]! as! NSArray)[0]) as! CBUUID 
926D74A0-D820-1000-8000-00805F9B34FB 

Ugh.

Verwandte Themen