CBCentralManager的状态什么时候会启动,但仍然给我一个“不通电”的警告?

当我运行在iPhone 5上使用CoreBluetooth的应用程序时,我不断收到此错误: <CBConcreteCentralManager: 0x2007d590> is not powered on

但是当我在我的程序的唯一一个CBCentralManager对象上调用state时,它返回5,即CBCentralManagerStatePoweredOn。 所以它的电源,但我得到这个错误。 iPhone的蓝牙function也已启用。

一般来说,这种情况何时会发生? 我甚至不知道当程序运行时发生了什么,因为我看到了看起来有冲突的消息。

您必须先等到centralManager从centralManagerDidUpdateState:获得callbackcentralManagerDidUpdateState:启动应用程序时。 然后每隔一段时间,我build议在进行任何centralManager调用之前检查状态。 在中央有机会更新之前,你很可能会打电话给扫描或检索。 确保只有在知道该方法后才能调用方法。 如果您将每个调用都打包在if语句中,那么您将不会收到错误。

 - (void)centralManagerDidUpdateState:(CBCentralManager *)central { if(central.state==CBCentralManagerStatePoweredOn) { //Now do your scanning and retrievals } } 

否则,只需在每次调用之前将您的核心包装在状态检查中:

 if(yourCentral.state==CBCentralManagerStatePoweredOn) { //you're good to go on calling centralManager methods }