我正在尝试断开与BLE设备的连接。我正在做cancelPeripheralConnection()
,而且从不调用didDisconnectPeripheral()
。
我正在将通知值设置为一个特征,因此在断开连接时我将其设置为false。
{
BLEOperations.sharedInstance.connectedDevice?.setNotifyValue(false, for: BLEOperations.sharedInstance.peripheralCharacteristics[0])
BLEOperations.sharedInstance.manager.cancelPeripheralConnection(BLEOperations.sharedInstance.connectedDevice!)
}
当用户尝试连接到新设备时,我正在尝试断开connectedPeripheral。当前设备未断开连接,但新设备与旧设备连接。
{
BLEOperations.sharedInstance.manager.connect(self.peripheralArray[indexPath.row] as! CBPeripheral , options: nil)
}
我在这里做错了什么?当设备连接丢失时,正在调用该方法。
答案 0 :(得分:2)
当CentralManager在整个流程中只有一个实例时,它将正常工作。
您可以创建CentralManager操作类(单例)并执行操作,而不是在viewcontroller中使用centralmanagerdelegates。
我做到了,工作正常。
答案 1 :(得分:1)
class MakeTree {
val tree = new Node(None, createSubTree _, createSubTree _);
def createSubTree(parent: Node): Option[Node] = {
if (parent.depth < 3)
Some(new Node(None, createSubNode _, createSubNode _))
else
None
}
}
class Node(val parent: Option[Node], leftFactory: (Node) => Option[Node], rightFactory: (Node) => Option[Node]) {
val left = leftFactory(this);
val right = rightFactory(this);
def depth(): Int = parent.map(_.depth + 1).getOrElse(0);
}
答案 2 :(得分:0)
好吧,我们可能需要有关您代码的更多信息。但是你正在寻找的方法就是这个。
func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
disconnected(central: central)
}
您应该将 centralManager 的委托设置为self,并且每次外围设备断开连接时都应该调用该委托。 做一些测试,断开过程并不像看起来那么好,你可以看到外围设备仍在断开连接,但代表已被调用(这可以通过硬件本身或外围设备上的固件进行调整)。
顺便说一下,您可以一次连接多个设备。