我是使用BLE的新手,目前正在尝试制作一个简单的应用程序,该应用程序将连接到我的自定义BLE设备。我能够发现BLE设备,但是由于某种原因我无法连接到它。
我尝试使用“浅蓝色”进行检查,它显示我的设备可连接,并且工作正常。但是,在我发现设备后,在我的应用程序中,CB管理器尝试连接到该设备,并且似乎“卡住”了吗?永远不会触发功能“didConnect外设”,而外设的状态则永远是“正在连接”。

我如何识别问题?我可以在连接方法中包含任何选项,或者以某种方式跟踪连接过程吗?

我将不胜感激任何在哪里寻找问题的建议。

使用Swift 3在XCode 8.2.1中工作。在测试电话上安装了iOS 10.2.1

这是我的代码:

import UIKit
import CoreBluetooth

class InfoPageViewController: UIViewController, CBCentralManagerDelegate, CBPeripheralDelegate {

var manager:CBCentralManager!
var peripheral:CBPeripheral!

let BEAN_NAME = "MyDevice"

override func viewDidLoad() {
    super.viewDidLoad()

    manager = CBCentralManager(delegate: self, queue: nil)
}

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {

    let device = (advertisementData as NSDictionary)
        .object(forKey: CBAdvertisementDataLocalNameKey)
        as? NSString

    if device?.contains(BEAN_NAME) == true {
        self.manager.stopScan()

        self.peripheral = peripheral
        self.peripheral.delegate = self

        manager.connect(peripheral, options: nil)

        print("discovered \(BEAN_NAME)")

    }
}

func centralManager(
    central: CBCentralManager,
    didConnect peripheral: CBPeripheral) {
    print("connected to \(BEAN_NAME)")

    peripheral.discoverServices(nil)
}

最佳答案

func centralManager(central: CBCentralManager, didConnect peripheral: CBPeripheral) {}
--------------------^

相对:
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral)
--------------------^

该方法的签名不正确,您缺少_

方法签名很重要。
我们可以假设,因为这些委托(delegate)方法是可选的,所以在内部,Apple代码会自问:
我的代表是否实现了func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral)方法(respondsToSelector:)?在您的情况下,则不然,因为两者不相同,因此不会调用您的。

您可以从文档中复制/粘贴该文档或将其删除,然后让XCode执行其自动完成功能。

关于ios - Swift 3 : Can't connect to peripheral via BLE,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42090560/

10-12 01:18