didDisconnectPeripheral不叫iOS Swift 3

时间:2017-01-27 08:49:01

标签: ios xcode swift3 disconnect cbperipheral

我正在尝试断开与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)

}

我在这里做错了什么?当设备连接丢失时,正在调用该方法。

3 个答案:

答案 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,并且每次外围设备断开连接时都应该调用该委托。 做一些测试,断开过程并不像看起来那么好,你可以看到外围设备仍在断开连接,但代表已被调用(这可以通过硬件本身或外围设备上的固件进行调整)。

顺便说一下,您可以一次连接多个设备。