Ios 蓝牙可编程设备连接后立即断开连接?

Ios 蓝牙可编程设备连接后立即断开连接?,ios,xcode,swift,bluetooth,Ios,Xcode,Swift,Bluetooth,我一直在使用Swift编写一个应用程序,它连接到蓝牙设备。由于某些原因,应用程序并不总是连接到设备。在这种情况下,它将连接,但会立即断开连接。这种情况可能只发生在10次连接中的1次,但肯定会干扰应用程序的可靠性。 我正在使用CoreBluetooth连接到BLE设备。再次尝试连接通常会让它重新连接,而与此设备通信的其他应用程序每次都能正常工作,因此我相信外围设备没有问题 我只是想知道是否有人有类似的问题,或者是否有一个特殊的原因,为什么会发生这种情况 编辑:这是我的表格的willSelectRo

我一直在使用Swift编写一个应用程序,它连接到蓝牙设备。由于某些原因,应用程序并不总是连接到设备。在这种情况下,它将连接,但会立即断开连接。这种情况可能只发生在10次连接中的1次,但肯定会干扰应用程序的可靠性。 我正在使用
CoreBluetooth
连接到BLE设备。再次尝试连接通常会让它重新连接,而与此设备通信的其他应用程序每次都能正常工作,因此我相信外围设备没有问题

我只是想知道是否有人有类似的问题,或者是否有一个特殊的原因,为什么会发生这种情况

编辑:这是我的表格的willSelectRow的代码。这是我连接外设的地方

    func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {

        centralManager.stopScan()
        connectingPeripheral.append(discoveredDeviceArrayInfo[indexPath.row])
        connectPeripheralNow(connectingPeripheral[0])

        return indexPath
}
这就是我让它连接的地方,在这一点上,我选择了设置要连接的设备的外围细节的行

ConnectPeripherald现在看起来像这样:

    func connectPeripheralNow(peripheral: CBPeripheral!){
    self.centralManager.connectPeripheral(peripheral, options: nil)
}
didConnectPeripheral和DidDiscoversServices看起来像这样

    func centralManager(central: CBCentralManager,didConnectPeripheral peripheral: CBPeripheral)
{

    peripheral.delegate = self
    peripheral.discoverServices([CBUUID(string: "FFE5")])
    print("SUCCESS: Connected to " + peripheral.name!)
}

func peripheral(peripheral: CBPeripheral, didDiscoverServices error: NSError?)
{
    if let servicePeripherals = peripheral.services as [CBService]!
    {
        for servicePeripheral in servicePeripherals
        {
            print("INFORMATION: Service discovered " + String(stringInterpolationSegment: servicePeripheral.UUID))
            peripheral.discoverCharacteristics(nil, forService: servicePeripheral)

        }

    }
}

只是为了提供信息,我确实收到了一条“成功:连接到xxx”的消息,显示它正在连接。如果你需要更多的代码,让我知道

你提到的更多的是一种预期行为。BTLE设计为消耗很少的能量,因此它会尽快断开连接。如果不需要永久连接,则在计时器触发Connect时,按照查找-->连接-->读/写-->设置计时器-->操作。


若你们需要一个永久连接,你们应该订阅传输实时数据的特性,比如心率应用程序。您需要实现
setNotifyValue:forCharacteristic:
方法。阅读了解更多详情。

您提到的更多是一种预期行为。BTLE设计为消耗很少的能量,因此它会尽快断开连接。如果不需要永久连接,则在计时器触发Connect时,按照查找-->连接-->读/写-->设置计时器-->操作。


若你们需要一个永久连接,你们应该订阅传输实时数据的特性,比如心率应用程序。您需要实现
setNotifyValue:forCharacteristic:
方法。阅读了解更多详细信息。

您可以添加委托方法的代码吗?谢谢您的回复!我在编辑部分添加了一些代码。如果您需要更多的代码,请告诉我!确保将要连接的外围设备存储在强变量中-它位于
connectingPeripheral
数组中,但如果从该数组中删除它,它将被释放,连接将失败。我建议您创建另一个属性/iVar,比如
connectedPeripheral
并将其存储在该属性中感谢您的推荐,我会这样做的!:)您能添加委托方法的代码吗?谢谢您的回复!我在编辑部分添加了一些代码。如果您需要更多的代码,请告诉我!确保将要连接的外围设备存储在强变量中-它位于
connectingPeripheral
数组中,但如果从该数组中删除它,它将被释放,连接将失败。我建议您创建另一个属性/iVar,比如
connectedPeripheral
并将其存储在该属性中感谢您的推荐,我会这样做的!:)谢谢你的帖子!这是一条非常有用的信息,我将仔细阅读并尝试这种实现方法,因为我需要与外围设备的永久连接。再次感谢!别担心。祝你一切顺利。如果这能解决您的问题,请务必告诉我。也会帮助我指导其他人:)。谢谢你的帖子!这是一条非常有用的信息,我将仔细阅读并尝试这种实现方法,因为我需要与外围设备的永久连接。再次感谢!别担心。祝你一切顺利。如果这能解决您的问题,请务必告诉我。也会帮助我指导其他人:)。