Swift: [CoreBluetooth] XP C соединение недействительно после закрытия всплывающего контроллера - PullRequest
1 голос
/ 13 июля 2020

У меня есть 2 ViewController (ViewController и SecondViewController).

SecondViewController - это tableView, который отображается как всплывающее окно. TableView перечислит все обнаруженные устройства BLE, и когда пользователь нажмет на ячейку, он подключится к выбранному устройству.

Все работает нормально, пока пользователь не закроет всплывающее окно, ошибка ниже будет напечатана немедленно, когда поповер уволен. [CoreBluetooth] XP C соединение недействительно

Я использую делегат протокола для передачи периферийных устройств и характеристик c

Это то, что у меня есть в моем SecondViewController :

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 я использую deviceReady в операторе If. но он показывает, что Поток 1: Неустранимая ошибка: Неожиданно обнаружен ноль при неявном разворачивании необязательного значения .

Похоже, что протокол c не вызван?

Могу я получить помощь?

1 Ответ

0 голосов
/ 04 августа 2020

Мое решение довольно простое. Я просто устанавливаю свой ViewController как stati c, затем создаю функцию установки для свойств периферийных устройств, а затем вызываю функцию установки в SecondViewController. Теперь он работает !!

В 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
}

В SecondViewController:

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

Надеюсь, это поможет кому-нибудь ..

* * В ходе своего исследования я обнаружил, что периферийные устройства нельзя передавать как слабую ссылку !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...