centralManager(_:didDisconnectPeripheral:错误:)不叫

问题描述 投票:-2回答:2

在写在斯威夫特(4.2)一CoreBluetooth相关的iOS应用程序,我有以下问题。

该应用程序处理一定数量PeripheralsCentrals的。每个Peripheral提供服务,并且具有连接到它的几个Centrals;它保持的是一个会计,并且知道很多Central的连接方式。

以相同的方式,每个Central连接到几个Peripherals;并且还保持的是一个会计知道多少Peripherals连接。

我的问题是关于簿记保持会计,我只是提的是,最新的。

Peripheral的一面,它的工作原理,我可以看到当Central已断开。对于我使用:peripheralManager(_:中央:didSubscribeTo :)和:peripheralManager(_:中央:didUnsubscribeFrom :)

Central我想用:centralManager(_:didConnect :)和:centralManager(_:didDisconnectPeripheral:错误:)

但在这里,出于某种原因,这是行不通的。第一个函数(centralManager(_:didConnect :))如预期被称为而不是第二(centralManager(_:didDisconnectPeripheral:错误:))。

我想没有被调用的函数的这最后一个问题是我需要解决的问题。不过,我可能是错的。

其结果是,我看到当Peripheral来临而不是在它离开。

我在想什么?还是我做错了?

我测试使用两个设备的应用程序。

---进一步的信息---(更新后)

下面是一些相关的代码:

func centralManager(_ central: CBCentralManager,
                    didDiscover peripheral: CBPeripheral,
                    advertisementData: [String : Any],
                    rssi RSSI: NSNumber) {
    print(#function)

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

    if let perifIndx = cbPerifList!.index(where:{$0.identifier==peripheral.identifier}) {
        central.connect(cbPerifList[perifIndx], options: nil)
    } else {
        peripheral.delegate = self
        cbPerifList.append(peripheral)
        central.connect(peripheral, options: nil)
    }
}

我注意到一个更可能相关的事情如下。而不是由一个按钮开关周围的开关,因为我通常应做的,我强迫杀死设备上的应用程序当前播放的外围角色,那么centralManager(_:didDisconnectPeripheral:错误:)函数调用另一台设备上,因为我希望它是;并正确地执行了会计。

ios swift core-bluetooth
2个回答
1
投票

在我CoreBluetooth应用

func centralManager (_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
}

当过外围丢失被调用。

也许检查您的didDisconnectPeripheral FUNC的语法。


0
投票

我没有找到一个直接的回答这个问题。阅读评论似乎表明有现在回答。换句话说就是我想做的事听起来是不可能的。如果一些专家的情况,否则要知道,请告诉我们。

在此期间我做了一个变通的解决方案:

当一个外设的关,我用其特点之一设置一些无感值,然后由中央作为提示要知道,外设有“说了再见” ......和它的作品。

© www.soinside.com 2019 - 2024. All rights reserved.