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

Swift 3: Can't connect to peripheral via BLE

我刚开始使用 BLE,目前正在尝试制作一个可以连接到我的自定义 BLE 设备的简单应用程序。我能够发现 BLE 设备,但由于某种原因我无法连接到它。 我尝试用 'Light Blue' 检查它,它显示我的设备可连接并且似乎工作正常。但是在我发现设备后,在我的应用程序中,CB 管理器尝试连接到它并且似乎 'freeze'?函数 'didConnect peripheral' 永远不会被触发,外设状态永远是 'connecting'.

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

如果有任何关于在哪里搜索问题的建议,我将不胜感激。

正在使用 XCode 8.2.1,使用 Swift 3. iOS 10.2.1 安装在测试 phone

这是我的代码:

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)
--------------------^

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

方法签名很重要。 我们可以假设,因为这些委托方法是可选的,所以在内部,Apple 代码会问自己: 我的委托是否实现了 func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) 方法 (respondsToSelector:)?你的情况不是,因为不一样,然后你的就不叫了。

您 copy/paste 文档中的那个或将其删除并让 XCode 执行其自动完成操作。