[英]Swift 3: Can't connect to peripheral via BLE
我刚接触BLE,目前正在尝试制作一个简单的应用程序,它将连接到我的自定义BLE设备。 我能够发现BLE设备,但由于某种原因我无法连接到它。 我尝试用'浅蓝'检查它,它显示我的设备可连接,似乎工作正常。 但在我发现设备后,我的应用程序,CB经理尝试连接到它,似乎“冻结”? 功能'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执行自动完成操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.