ios - 将 CoreBluetooth 代表移动到单独的班级后,如何让他们工作?
问题描述
我创建了一个小项目来测试Bluetooth
使用CoreBluetooth
framework
. 在我的viewController
情况下,它可以像这样正常工作:
class ViewController: UIViewController {
var myCentral: CBCentralManager! = nil
override func viewDidLoad() {
super.viewDidLoad()
myCentral = CBCentralManager(delegate: self, queue: nil)
}
}
extension ViewController: CBCentralManagerDelegate {
func centralManagerDidUpdateState(_ central: CBCentralManager) {
if central.state == .poweredOn {
central.scanForPeripherals(withServices: nil, options: nil)
}
}
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
if let name = peripheral.name {
print(name)
}
}
}
但是,我想将这些Bluetooth
东西移到另一个class
上,然后从viewController
. 那可能吗?我的尝试不起作用:
在 Newclass
中,移动了Bluetooth
这些东西:
class BLEhandler: NSObject {
var centralManager: CBCentralManager!
}
extension BLEhandler: CBCentralManagerDelegate {
func centralManagerDidUpdateState(_ central: CBCentralManager) {
if central.state == .poweredOn {
central.scanForPeripherals(withServices: nil, options: nil)
}
}
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
if let name = peripheral.name {
print(name)
}
print(peripheral.name)
}
}
并从以下位置调用它viewController
:
override func viewDidLoad() {
super.viewDidLoad()
var centralManager = BLEhandler().centralManager
centralManager = CBCentralManager(delegate: self, queue: nil)
}
现在它只显示一个小的log
:
[CoreBluetooth] XPC 连接无效
我怀疑我可以delegates
这样使用,我认为解决方案与协议有关,但我不确定。您将如何转移delegates
到其他classes
人并仍然让他们工作?
解决方案
好的,只需在以下位置声明它即可使其工作ViewController
:
var centralManager: BLEhandler!
然后在viewDidLoad
我initialized
里面:
centralManager = BLEhandler()
而不是直接initializing
在viewDidLoad
.
推荐阅读
- excel - Tableau 中每月回报流的相关矩阵
- aframe - 我们可以通过 a-scene 属性设置 renderer.toneMapping 吗?
- ruby - 为什么不能从 YAML 中反序列化所有 DateTime 实例?
- amazon-web-services - 使用来自另一个区域的 AWS Private Api Gateway
- import - 如何从 TIFF 文件中的文本包围的具体行中获取数字(如果在记事本中查看)并将其用于 Digital Micrograph 的脚本中?
- python - 在 Packet Tracer 中模拟温度传感器值,无需真实硬件
- python - ValueError:发现样本数量不一致的输入变量:[676, 540]
- web - Squarespace 产品列表页面编辑
- python - 如何在不删除重复项的情况下找到最常用的单词?
- firebase - 颤振 - 类型'列表
' 不是类型 'String' 的子类型