如何在Swift中初始化外围设备管理器?

时间:2015-07-15 23:03:11

标签: ios swift ios8 bluetooth core-bluetooth

我想检查设备上是否启用了蓝牙,并将状态打印到控制台。我的班级符合CBPeripheralManagerDelegate,我没有错误。我阅读了文档并实现了peripheralManagerDidUpdateState函数,但它永远不会被调用。我的理解是,当蓝牙的可用性发生变化时,会调用函数。因此,如果我关闭蓝牙,应该调用该功能,然后重新打开蓝牙后应再次调用。但这不会发生。我看到another question有同样的问题,但解决方案是用Objective-C编写的,并没有解决我的问题。

当我在viewDidLoad中运行此代码时,它返回unknown,我不知道为什么。我希望它返回powered on

cbManager.delegate = self
    if cbManager.state == .PoweredOn {
        println("powered on")
    } else if cbManager.state == .Unauthorized {
        println("unauthorized")
    } else if cbManager.state == .Unknown {
        println("unknown")
    } else if cbManager.state == .PoweredOff {
        println("pow off")
    } else if cbManager.state == .Unsupported {
        println("unsupported")
    }

我在cbManager之外声明viewDidLoad,因为如果我不这样做,peripheralManagerDidUpdateState无法识别经理。 另一个问题的问题是“一旦viewDidLoad方法返回,对象myPeripheralManager就会被解除分配”。我认为这也是我的问题,但我不知道如何解决它。

这是我的经理声明: let cbManager = CBPeripheralManager()之外的viewDidLoad

谢谢!

更新

经过几个小时后,我想我已经找到了问题。我不知道这是不是为什么它不起作用但它现在有效。当我应该使用CBPeripheralManager时,我正在使用CBCentralManagerThis question帮助向我展示了(尽管这是一个完全不同的问题)中央和外围经理之间的区别。

更新#2:

此外,传递给peripheralManagerDidUpdateState的经理与我在函数本身中使用的经理不同。这与使用错误的管理器相结合导致了问题。希望这有助于某人!

0 个答案:

没有答案