Я пытаюсь получить NSDictionary из NSData характеристики bluetooth, но я получил сообщение об ошибке «NSKeyedUnarchiver initForReadingWithData:]: непонятный архив».Как получить NSDictionary из NSData из характеристики Bluetooth в Swift
периферийный диспетчер отправляет NSDictionary, как это, в Центральный.
func peripheralManager(peripheral: CBPeripheralManager!, didReceiveReadRequest request: CBATTRequest!) {
var responseDictonary: Dictionary = [
"id" : 11111,
"name" : "hoge"
]
request.value = NSKeyedArchiver.archivedDataWithRootObject(responseDictonary)
peripheralManager.respondToRequest(request, withResult: CBATTError.Success)
}
Центральный диспетчер получает такое периферийное устройство.
func peripheral(peripheral: CBPeripheral!, didUpdateValueForCharacteristic characteristic: CBCharacteristic!, error: NSError!) {
if (error != nil) {
return
}
if characteristic.UUID == BLECharacteristicUUID {
let data : NSData = characteristic.value
if let recieveDictonary = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? NSDictionary {
var id = recieveDictonary["id"] as Int
var name = recieveDictonary["name"] as String
Tracker.sharedInstance.debug("\(id) \(name)")
}
}
}
У вас есть решения?
Я пробовал их обоих. В первом методе я мог бы правильно разблокировать, а данные второго метода - нет. Похоже, что что-то добавлено в данные из bluetooth ... Я не уверен, хотя. –
О, может быть, просто исключите все другие возможности, попробуйте для словаря того же типа значения и разблокируйте его, т.е. - var responseDictonary: Dictionary = [ "id": "11111", "name": "hoge" ] –