我有3个ViewController。 1)家用VC 2)扫描VC 3)连接VC
步骤: 我从Home VC推送到Scan VC以扫描可用的BLE设备。
扫描VC:我在这里拥有所有BLE通信代码:
override func viewDidLoad() {
super.viewDidLoad()
AppConstants.sharedInstance.centralManager = CBCentralManager(delegate: self, queue: nil) // created global Instance for central Manager and assigned it here
}
以上将致电centralManagerDidUpdateState(_ central: CBCentralManager)
,我正在检查BLUETOOTH的所有状态。如果,
case .poweredOn:
btnRefresh.isEnabled = true
print("central.state is .poweredOn...")
startScan()
}
然后我扫描设备。
获得设备后,我会从扫描的设备列表中连接到它,
然后我成功连接到该设备,它进入 Connect VC。
直到这里一切都很棒。
但是真正的问题开始于
1)我从连接VC弹出到扫描VC ,然后再次弹出到 HOMEVC ,然后
2)然后,我再次从家庭VC 推送到扫描VC
扫描VC:,这将调用并将委托分配给我的全局CentralManager,并且在再次分配委托后,它将断开先前的连接。 (即使我没有接到任何 didDisconnectPeripheral 电话)
override func viewDidLoad() {
super.viewDidLoad()
AppConstants.sharedInstance.centralManager = CBCentralManager(delegate: self, queue: nil) // Here when I come again it disconnects old connection.
}
我不知道这是什么问题。我没有任何错误。 请帮助...
答案 0 :(得分:1)
我认为,由于您将CBCentralManager
中的AppConstants.sharedInstance.centralManager
重新分配给viewDidLoad
,因此CBCentralManager
遭到破坏和断开连接。
也被销毁了,它没有返回任何委托回调。
那么您能否像下面这样尝试仅初始化CBCentralManager
一次并在需要时断开连接?
示例:
override func viewDidLoad() {
super.viewDidLoad()
if AppConstants.sharedInstance.centralManager == nil{
AppConstants.sharedInstance.centralManager = CBCentralManager(delegate: nil, queue: nil)
}
AppConstants.sharedInstance.centralManager.delegate = self
}
答案 1 :(得分:0)
不用担心。我找到了解决方法。感谢@Natrajan给我一些想法。
pip install pandas
这可以达到我的目的,我可以检查蓝牙状态并进行相应的扫描(每次按下Scan VC)
Yuppieee ... :)