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

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

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

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

在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) } 

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

与:

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

方法的签名不正确,你错过了_

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

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