gpt4 book ai didi

ios - 在 Swift 中轮询 BLE 适配器的响应

转载 作者:行者123 更新时间:2023-11-30 13:36:47 25 4
gpt4 key购买 nike

使用基于 Wi-Fi 套接字的适配器,我可以成功轮询响应,如下所示:

    func writeMessageWithResponse(message: String) -> [String] {
self.waitingForResponse = true
let runLoop = NSRunLoop.currentRunLoop()
if self.response != nil {
self.response?.removeAll()
}

writeMessage(message) // this will set self.waitingForResponse to false when a response is received

while self.waitingForResponse && runLoop.runMode(NSDefaultRunLoopMode, beforeDate: NSDate.distantFuture()) {
// waiting for flag (self.waitingForResponse) to be set
}

return self.response!
}

当我在 CBCentralManager BLE 连接中使用相同的代码时,主线程被阻塞并且无法接收来自连接的响应。我尝试将 CBCentralManager 更改为不同的队列,但得到了相同的结果。

有人知道如何在循环中等待并且仍然能够接收 BLE 响应吗?我知道正在发送响应,但线程被阻止并且无法读取它。

使用带有completionHandler的异步函数不适用于此用例,因为我需要一个可重用的函数,它可以发出一系列命令,每个命令都依赖于最后一个响应的结果。

最佳答案

CBCentralManager 和 CBPeripheral API 并不是真正为此设计的。您应该使用 CBPeripheralDelegate 和 CBCentralManagerDelegate 协议(protocol)提供的方法。使用专用队列初始化您的中央管理器,以便您可以监听对外围设备的响应并根据该数据采取适当的操作。

关于ios - 在 Swift 中轮询 BLE 适配器的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35976702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com