gpt4 book ai didi

swift - Mac 命令行应用程序上的 CoreBluetooth

转载 作者:可可西里 更新时间:2023-11-01 00:57:28 27 4
gpt4 key购买 nike

我正在尝试构建一个使用 CoreBluetooth 的命令行应用程序。问题是,它不适用于命令行应用程序。

我已经将我的 CoreBluetooth 代码(一个实现 CBCentralManagerDelegate 协议(protocol)的类 - 我们称这个类为 myBLEManager)从命令行应用程序项目移动到另一个 Mac 操作系统GUI 应用程序。

我在 ViewDidLoad() 中运行了一些测试—— super 样本,我只是初始化了一个 myBLEManager,它在初始化时创建了一个 CBCentralManager 的实例,然后调用 scanForPeripherals

这是我在 CLI 和 GUI 项目中所做的。区别在于 centralManagerDidUpdateState 永远不会在 CLI 项目中被调用。但它在 GUI Mac 应用程序中确实如此。

最佳答案

大多数 Apple 框架中的回调都是通过应用程序的主运行循环传递的。如果您的命令行工具没有运行循环,则它无法接收以这种方式发送的回调。

如果没有 runloop,框架调用回调的唯一方法是在另一个线程上运行它,这可能会导致应用程序出现意想不到的奇怪行为。

添加就足够了:

let runLoop = RunLoop.current
let distantFuture = Date.distantFuture
while running == true && runLoop.run(mode: RunLoopMode.defaultRunLoopMode, before: distantFuture) {

}

关于swift - Mac 命令行应用程序上的 CoreBluetooth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42634584/

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