【问题标题】:CoreBluetooth XPC Connection Invalid on dismiss viewcontrollerCoreBluetooth XPC 连接在关闭视图控制器时无效
【发布时间】:2017-10-08 09:16:12
【问题描述】:

在我完成与蓝牙设备的断开连接后,在 didDisconnectPeripheral 委托中看到它们已断开连接,我尝试关闭我的视图控制器。

发生这种情况时,我看到消息:“[CoreBlueooth] XPC 连接无效”

在关闭视图控制器之前,是否需要使用蓝牙清除某些特定内容?

【问题讨论】:

  • 这似乎与视图控制器无关。每次 CBCentralManager 被释放时,我都会收到此消息。只需使用局部变量进行测试,例如CBCentralManager(代表:无,队列:无)。一旦范围结束,就会弹出该错误消息。
  • 我遇到了同样的错误(“[CoreBlueooth] XPC Connection Invalid”)......在我的例子中,我在视图控制器之外实例化了 CBCentralManager。在视图控制器中实例化它为我解决了这个问题。

标签: ios objective-c core-bluetooth


【解决方案1】:

我把CBCentralManager放到了一个单例中,错误信息就解决了。

CBCentralManager 不会被释放)

【讨论】:

  • 谢谢。这帮助我解决了我的问题。您可以将 CBCentralManager 作为类变量(在函数外部声明)而不是局部变量。
  • 我遇到了类似的问题,在我的应用程序中,我有一个列出 BLE 设备的第一个屏幕,当您单击一个设备时,您将被带到另一个屏幕,我收到了这个描述性错误消息。 CBCentralManager 是一个单例,你必须从一个视图传递到另一个视图......
【解决方案2】:

试试这个:

CBPeripheral *mConnectedPeripheral;

-(void)viewDidDisappear:(BOOL)animated{
    [_centralManager cancelPeripheralConnection:mConnectedPeripheral];
}

【讨论】:

    【解决方案3】:

    我收到以下消息:

    [CoreBlueooth] XPC 连接无效

    而且我无法使用以下非常简单的实现来扫描 BLE 设备:

    NSObject<CBCentralManagerDelegate, CBPeripheralDelegate>
    

    我的解决方案是在我的Info.plist 中为Privacy - Bluetooth Peripheral Usage Description添加一个值,NSBluetoothPeripheralUsageDescription 描述了我对 Bluetooth Peripheral 的操作。

    info.plist 中看起来像这样:

    <key>NSBluetoothPeripheralUsageDescription</key>
    <string>Play with BLE Compatible devices<string>
    

    在这里写一些更准确的东西 ;)

    【讨论】:

    • 发生这种情况时,请尝试隔离您的问题,以便找出导致问题的原因。你也可以在这里评论更多细节。有很多开源项目可以扫描设备,甚至可以让你写信给characteristics,等等。chenee/DarkBlue 对我很有帮助。对于快速项目:Pluto-Y/Swift-LightBlue。在我的情况下,我开始了一个空白项目并做了最少的代码来与我的设备进行通信,必须添加 NSBluetoothPeripheralUsageDescription 并且它有效 ?
    • @VineeshTP 你能详细说明一下吗?正如我在上面评论的那样,隔离您的问题并找出导致此问题的原因。
    • @PravinS。尝试将您的问题隔离在一个单独的项目中,请参阅此评论:stackoverflow.com/questions/43880346/… 随时添加您可能会在此处收到的详细信息或错误消息。这个解决方案对我有用,现在仍然适用于生产中的应用程序;)
    • @Oscar:其实我不记得了,2年前了。你能详细说明你的问题吗?
    • 我收到“[CoreBlueooth] XPC Connection Invalid”,这是这里的原始主题。我尝试了另一个项目,其他人的演示项目,它在控制台中产生了相同的消息。
    【解决方案4】:

    好的,我遇到了这个问题,在尝试将必要的密钥添加到 Info.plist 之后,它仍然有效,此时我没有使用的视图(它在 AppDelegate 中)。 因此,如果它仍然不适合您,请尝试以下操作。

    我曾经使用:(在 Swift 中)

    _ = BluetoothMngr.init(config: bleConfig)
    

    这里的问题是管理蓝牙的变量没有被保留,所以当我们添加 BLE 回调时,这些变量最终在一个空类中,所以只需创建一个将要保留的全局变量(这就是它与单例一起使用的原因并查看这些保留)像这样。

    self.bleMngr = BluetoothMngr.init(config: bleConfig)
    

    为我工作,希望它会有所帮助。

    【讨论】:

      【解决方案5】:

      CBCentralManager 引用应该是作为成员变量的类的强引用。它不能作为本地参考。

      【讨论】:

        【解决方案6】:

        在我的例子中,我从功能中关闭了应用沙盒,并且它起作用了

        【讨论】:

          【解决方案7】:

          当我将所有 BLE 方法移至专用类 (BLEController) 并保持 ViewController 干净时,也发生了同样的问题。首先,我尝试在 ViewController 类中初始化它,如下所示:

          let _ = BLEController()
          

          这会导致“XPC 连接无效”问题。真正有帮助的是将对象移动到 AppDelegate 类。老实说,我不知道它为什么有帮助,有什么区别。

          【讨论】:

            猜你喜欢
            • 2020-11-02
            • 2018-09-29
            • 2017-08-10
            • 2013-02-15
            • 1970-01-01
            • 2021-07-27
            • 2020-04-25
            • 2014-09-10
            • 2017-01-06
            相关资源
            最近更新 更多