在写在斯威夫特(4.2)一CoreBluetooth
相关的iOS应用程序,我有以下问题。
该应用程序处理一定数量Peripherals
和Centrals
的。每个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:错误:)函数调用另一台设备上,因为我希望它是;并正确地执行了会计。
在我CoreBluetooth
应用
func centralManager (_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
}
当过外围丢失被调用。
也许检查您的didDisconnectPeripheral
FUNC的语法。
我没有找到一个直接的回答这个问题。阅读评论似乎表明有现在回答。换句话说就是我想做的事听起来是不可能的。如果一些专家的情况,否则要知道,请告诉我们。
在此期间我做了一个变通的解决方案:
当一个外设的关,我用其特点之一设置一些无感值,然后由中央作为提示要知道,外设有“说了再见” ......和它的作品。