Swift 3:无法通过BLE连接到外设

时间:2017-02-07 13:00:56

标签: ios swift xcode bluetooth-lowenergy core-bluetooth

我刚接触BLE,目前正在尝试制作一个可以连接到我的自定义BLE设备的简单应用程序。我能够发现BLE设备,但出于某种原因我无法连接它。 我尝试用' Light Blue'来检查它,它显示我的设备是可连接的,似乎工作正常。但在我发现设备后,我的应用程序中,CB经理尝试连接到它并似乎“冻结”?功能' didConnect外围设备'永远不会被触发,外围的状态永远是“连接”。

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

我很感激任何建议在哪里寻找问题。

在XCode 8.2.1中工作,使用Swift 3. 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)
}

1 个答案:

答案 0 :(得分:3)

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

对战:

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

该方法的签名不正确,您遗漏了_

方法签名很重要。 我们可以假设,因为这些委托方法是可选的,在内部,Apple代码会自行询问: 我的代理人是否已实施func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral)方法(respondsToSelector:)?在你的情况下,不是,因为它不一样,然后你的不被召唤。

您从文档中复制/粘贴一个或删除它,让XCode执行自动完成操作。