Swift: [CoreBluetooth] XPC 连接在关闭 popover 控制器后无效

Swift: [CoreBluetooth] XPC connection invalid after dismissing popover controller

我有 2 个 ViewController(ViewController 和第二个ViewController)。

第二个ViewController 是一个显示为弹出窗口的 tableView。 tableView 将列出所有发现的 BLE 设备,当用户点击单元格时,它将连接到所选设备。

在用户关闭弹出窗口之前一切正常,当弹出窗口关闭时将立即打印以下错误。 [CoreBluetooth] XPC 连接无效

我正在使用协议委托来传递外设和特征

这是我的第二个ViewController:

protocol PassDataDelegate {

    func passPeripheral(_ deviceToConnect: CBPeripheral!)

    func passCharacteristic(_ char: CBCharacteristic!)
}

class SecondViewController: UIViewController, CBPeripheralDelegate {
    ...
    var peripherals = Array<CBPeripheral>()
    var deviceToConnect: CBPeripheral?
    var char: CBCharacteristic?
    var deviceReady: Bool?
    var delegate: PassDataDelegate?
...
}

//passing variables
delegate?.passPeripheral(deviceToConnect!)
delegate?.passCharacteristic(char!)

这是我的 ViewController:

extension ViewController: PassDataDelegate {
    func passPeripheral(_ device: CBPeripheral!) {
        self.device = device
    }

    func passCharacteristic(_ characteristic: CBCharacteristic!) {
        self.characteristic = characteristic
        self.deviceReady = true
    }
}

在我的 ViewController 的某处,我在 If 语句中使用了 deviceReady。但它显示 Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value .

好像没有调用协议函数?

我可以得到一些帮助吗?

我的解决方案有点简单。我只是将 ViewController 设置为静态,然后为外围设备属性创建一个 setter 函数,然后在 SecondViewController 中调用 setter 函数。现在可以使用了!!

在ViewController中:

static var vc: ViewController?
...

func setCB(centralManager: CBCentralManager, deviceToConnect: CBPeripheral, char: CBCharacteristic, deviceReady: Bool) {
    self.centralManager = centralManager
    self.deviceToConnect = deviceToConnect
    self.char = char
    self.deviceReady = deviceReady
}

秒ViewController:

if let controller = ViewController.vc {
                controller.setCB(centralManager: centralManager, deviceToConnect: deviceToConnect, char: char, deviceReady: deviceReady)
            }

我希望这可以帮助某人..

**通过我的研究,我发现外设不能作为弱引用传递!!