我正在使用Xcode 7,swift 2在iOS 9上使用蓝牙。
我使用蓝牙接收值,我想在调试时打印。
这是我的代码:
func peripheral(peripheral: CBPeripheral, didUpdateValueForCharacteristic characteristic: CBCharacteristic, error: NSError?) {
IncomingBLE = NSString(data: characteristic.value!, encoding: NSASCIIStringEncoding)!
print(IncomingBLE, separator: ";", terminator: "\n")
print("") }
在我的调试中我得到了这个:
Humidity50.00Temp30.00BatLevel80
Humidity
50.00Temp30.00BatLevel80Humidity50.00Temp
30.00
BatLevel80Humidity50.00
有时会出现换行符,但通常不在此处。是什么原因?
答案 0 :(得分:2)
由于didUpdateValueForCharacteristic
是异步调用的。当值快速更新时,数据可能会在控制台上交织在一起。您可以尝试在主队列上调度打印,因为这是一个串行调度队列;
func peripheral(peripheral: CBPeripheral, didUpdateValueForCharacteristic characteristic: CBCharacteristic, error: NSError?) {
IncomingBLE = NSString(data: characteristic.value!, encoding: NSASCIIStringEncoding)!
dispatch_async(dispatch_get_main_queue()) { () -> Void in
print(IncomingBLE, separator: ";", terminator: "\n")
}
}
更新
出于调试目的,NSLog
语句可以更可靠;
func peripheral(peripheral: CBPeripheral, didUpdateValueForCharacteristic characteristic: CBCharacteristic, error: NSError?) {
IncomingBLE = NSString(data: characteristic.value!, encoding: NSASCIIStringEncoding)!
dispatch_async(dispatch_get_main_queue()) { () -> Void in
NSLog(IncomingBLE.description)
}
}
它甚至可以在没有dispatch_async