首页 > 解决方案 > 将 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人并仍然让他们工作?

标签: iosswiftdelegatescore-bluetooth

解决方案


好的,只需在以下位置声明它即可使其工作ViewController

var centralManager: BLEhandler!

然后在viewDidLoadinitialized里面:

centralManager = BLEhandler()

而不是直接initializingviewDidLoad.


推荐阅读