我是 BLE 的新手,目前正在尝试制作一个简单的应用程序来连接到我的自定义 BLE 设备。我能够发现 BLE 设备,但由于某种原因我无法连接到它。
我尝试用“浅蓝色”进行检查,它显示我的设备可连接并且似乎工作正常。但在我的应用程序中,当我发现该设备后,CB 管理器尝试连接到它,但似乎“冻结”了?函数“didConnect Peripheral”永远不会被触发,并且外围设备的状态永远是“connecting”。
我如何识别问题?我可以在连接方法中包含任何选项,或者以某种方式跟踪连接过程吗?
我将不胜感激任何在哪里寻找问题的建议。
使用 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) {}
--------------------^
Versus:
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral)
--------------------^
该方法的签名不正确,您缺少_
.
方法签名很重要。
我们可以假设,由于这些委托方法是可选的,因此 Apple 代码在内部会询问自己:
我的代表有方法吗func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral)
实施的 (respondsToSelector:
)?在你的情况下,不是,因为它不一样,然后你的就不会被调用。
您可以从文档中复制/粘贴该内容或将其删除,然后让 XCode 完成自动完成工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)