在我完成与蓝牙设备的断开连接后,看到他们已经在didDisconnectPeripheral委托中断开连接,我试图解除我的viewcontroller。
当发生这种情况时,我会看到以下消息:" [CoreBlueooth] XPC连接无效"
在解除视图控制器之前,是否有特定的东西需要用蓝牙清理?
答案 0 :(得分:8)
我将CBCentralManager
放到单身人士身上,错误信息就解决了。
(CBCentralManager
不会被取消分配)
答案 1 :(得分:6)
我收到以下消息:
[CoreBlueooth] XPC连接无效
我无法使用以下非常简单的实现扫描BLE设备:
NSObject<CBCentralManagerDelegate, CBPeripheralDelegate>
我的解决方案是在我的Info.plist
中为隐私权 - 蓝牙外围设备使用说明 NSBluetoothPeripheralUsageDescription
添加一个值,说明我对蓝牙外设的处理方式。
在info.plist
中看起来像这样:
<key>NSBluetoothPeripheralUsageDescription</key>
<string>Play with BLE Compatible devices<string>
在这里写一些更准确的内容;)
答案 2 :(得分:3)
CBCentralManager引用应该是作为成员变量的类的强引用。它不能用作本地参考。
答案 3 :(得分:1)
试试这个:
CBPeripheral *mConnectedPeripheral;
-(void)viewDidDisappear:(BOOL)animated{
[_centralManager cancelPeripheralConnection:mConnectedPeripheral];
}
答案 4 :(得分:1)
当我将所有BLE方法移至专用类(BLEController)并保持ViewController清洁时,发生了同一问题。首先,我试图像这样在ViewController类中初始化它:
let _ = BLEController()
这导致“ XPC连接无效”问题。真正有用的是将对象移至AppDelegate类。老实说,我不知道它为什么起作用以及有什么区别。
答案 5 :(得分:0)
好吧,我遇到了这个问题,在尝试将必要的密钥添加到Info.plist之后,它仍然可以正常工作,并且我现在没有使用的视图(在AppDelegate中)。 因此,如果仍然无法使用,请尝试以下操作。
我曾经用过:(在Swift中)
_ = BluetoothMngr.init(config: bleConfig)
这里的问题是管理蓝牙的变量没有保留,因此当我们添加BLE回调时,这些变量最终变成一个空类,因此只需在要保留的地方创建一个全局变量即可(这就是为什么它可以与singleton一起使用的原因)并查看这些内容是否保留)。
self.bleMngr = BluetoothMngr.init(config: bleConfig)
为我工作,希望能为您提供帮助。
答案 6 :(得分:0)
以我为例,我关闭了功能中的应用沙箱,并且可以正常工作