ios - 快速打印不会终止\n

标签 ios swift printing bluetooth

我正在使用 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

有时会出现换行,但通常不会出现。这是什么原因?

最佳答案

由于 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

的情况下工作

关于ios - 快速打印不会终止\n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35120705/

相关文章:

iphone - 如何在iOS中播放电影片段

swift - 从 facebook swift FBSDK 检索个人资料图片时出错

swift - 条件中的变量绑定(bind)需要初始化程序/条件中的模式匹配需要 'case' 关键字

ios - AnyObject 在 Xcode8 beta6 中不工作?

c# - 在不打印文档的情况下获取打印页数

c# - 清除 PrintDocument

javascript - 从弹出窗口打印图像

ios - 展开/折叠 UITableview

ios - 从 Xcode iOS 项目运行 swift 脚本作为构建阶段

iphone - 如何在 UiTextView 中输入多色文本?