在以Swift(4.2)编写的CoreBluetooth
相关的iOS应用中,我遇到以下问题。
该应用程序处理一定数量的Peripherals
和Centrals
。
每个Peripheral
提供一项服务,并有多个Centrals
与之连接;它会对此进行核算,并知道连接了多少个Central。
每个Central
以相同的方式连接到多个Peripherals
;并对此进行核算,以了解连接了多少Peripherals
。
我有一个问题是关于保持我刚才提到的会计记录保持最新状态。
从Peripheral
端开始,我可以看到Central
何时断开连接。
为此,我使用:
peripheralManager(_:central:didSubscribeTo:)
和:
peripheralManager(_:central:didUnsubscribeFrom:)
在Central
中,我要使用:
centralManager(_:didConnect:)
和:
centralManager(_:didDisconnectPeripheral:error:)
但是在这里,由于某种原因,它不起作用。第一个函数( centralManager(_:didConnect:))被按预期方式调用,但第二个函数( centralManager(_:didDisconnectPeripheral:error:))不被调用。
我想函数的最后一个问题是我需要解决的问题。但是我可能错了。
结果,我看到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:error:)函数是就像我期望的那样调用了另一台设备;并且会计核算正确执行。
答案 0 :(得分:1)
在我的CoreBluetooth
应用中
func centralManager (_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
}
在外围设备丢失时调用。
也许检查一下didDisconnectPeripheral
函数的语法。
答案 1 :(得分:0)
我没有找到这个问题的直接答案。 阅读评论似乎表明现在已经有了答案。换句话说,我想做的事听起来是不可能的。如果某些专家碰巧知道其他情况,请告诉我们。
与此同时,我提出了一种解决方法:
当关闭一个外围设备时,我使用其特性之一来设置一些无意义的值,然后该值被中央用作提示,以知道外围设备已“说再见”。有效。