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



我是使用BLE的新手,目前正在尝试制作一个简单的应用程序,可以连接到我的自定义BLE设备。我能够发现BLE设备,但由于某种原因我无法连接到它。我尝试使用"浅蓝色"检查它,它显示我的设备可连接并且似乎工作正常。但是在我发现设备后,在我的应用程序中,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)
}
func centralManager(central: CBCentralManager, didConnect peripheral: CBPeripheral) {}
--------------------^

对:

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

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

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

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

最新更新