将CoreBluetooth委托移到一个单独的类后,如何使它们工作?

问题描述 投票:0回答:1

我创建了一个小项目,使用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运行它。那可能吗?我的尝试无效:

在新的class中,移动了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并仍然使它们工作?

ios swift delegates core-bluetooth
1个回答
0
投票

[好吧,只需在ViewController中先声明一下即可使其生效:

var centralManager: BLEhandler!

然后在viewDidLoadinitialized中:

centralManager = BLEhandler()

而不是直接在initializing中将其viewDidLoad

© www.soinside.com 2019 - 2024. All rights reserved.