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

时间:2013-06-14 23:08:35

标签: iphone ios bluetooth core-bluetooth cbcentralmanager

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

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

总的来说,这会发生什么时候?我甚至不知道程序运行时发生了什么,因为我得到了看起来像冲突的消息。

1 个答案:

答案 0 :(得分:22)

当你启动应用程序时,你必须等到centralManager从centralManagerDidUpdateState:获得回调。然后每隔一次,我建议在进行任何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
}