我想检查设备上是否启用了蓝牙,并将状态打印到控制台。我的班级符合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
时,我正在使用CBCentralManager
。 This question帮助向我展示了(尽管这是一个完全不同的问题)中央和外围经理之间的区别。
更新#2:
此外,传递给peripheralManagerDidUpdateState
的经理与我在函数本身中使用的经理不同。这与使用错误的管理器相结合导致了问题。希望这有助于某人!