CoreBluetooth / centralManager: функция didConnect не вызывается - PullRequest
0 голосов
/ 16 января 2019

При работе с CoreBluetooth я нахожу случаи, когда функция CBCentralManagerDelegate centralManager (_: didConnect:) не вызывается, когда это происходит, я также обнаружил, что centralManager (_: didDiscover: advertisingData: rssi:) функция может вызываться несколько раз, при этом Периферийное состояние будет .disconnected в первый раз, а затем .connecting после этого .

Это то, что должно происходить, или это показывает, что в моем коде есть возможные ошибки? Что мне делать, если Периферийное состояние .connecting ? Выйти из функции, ничего не делая?

Вот некоторые соответствующие коды:

func centralManager(_ central: CBCentralManager,
                    didDiscover peripheral: CBPeripheral,
                    advertisementData: [String : Any],
                    rssi RSSI: NSNumber) {
    print(#function)
    if peripheral.state != .disconnected {
        // This is not the case the first time this function is called.
        // It is not clear what to do here.
        print("peripheral not disconnected")
        return
    }

    peripheral.delegate = self

    if cbPerifList  == nil {cbPerifList = [CBPeripheral]()}

    cbPerifList!.index(where:{$0.identifier==peripheral.identifier}) == nil {
        cbPerifList.append(peripheral)
    }

    central.connect(peripheral, options: nil)
}


func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
    print(#function)
    peripheral.discoverServices(listeningServices)
}
...