调用IOBluetoothHostController.default()时出现异常问题咨询
解决IOBluetoothHostController.default()输出stderr异常的问题
我之前也碰到过这个烦人的情况!你说的没错,功能完全正常,但调用IOBluetoothHostController.default()时就是会在标准错误输出里冒出一些奇怪的日志,看着特别碍眼。其实这根本不是你的代码问题,是这个版本的IOBluetooth框架本身会输出一些内部调试信息,并非真正的运行错误。
如果想要彻底屏蔽这些输出,同时又不影响后续代码的正常错误日志输出,可以试试临时重定向标准错误输出的方法,具体代码如下:
import Foundation import IOBluetooth // 先保存原始的stderr文件描述符 let originalStderr = dup(STDERR_FILENO) // 把stderr临时重定向到/dev/null(直接丢弃所有输出) freopen("/dev/null", "w", stderr) // 调用那个会输出日志的方法 let controller = IOBluetoothHostController.default() // 恢复原来的stderr,确保后续错误能正常输出到控制台 dup2(originalStderr, STDERR_FILENO) close(originalStderr) if let controller = controller { if controller.powerState.rawValue == 1 { print("Bluetooth is on") } else { print("Bluetooth is off") } } else { print("Can't get Bluetooth...") }
原理很直白:在调用default()之前,我们把标准错误输出转到/dev/null,让框架的内部日志直接被丢弃;调用完成后再把stderr恢复成原来的状态,这样后续代码如果有真正的错误信息,还是能正常输出到控制台的。
要是觉得这个方法有点繁琐,其实也可以选择直接忽略这些日志——毕竟它完全不影响功能的正常运行,只是视觉上不太舒服而已。
内容的提问来源于stack exchange,提问作者Mox
相关产品推荐
相关产品推荐

