当我在iPhone 5上运行使用CoreBluetooth的应用程序时,我一直收到此错误:<CBConcreteCentralManager: 0x2007d590> is not powered on
但是当我在我的程序的唯一CBCentralManager对象上调用state
时,它返回5,即CBCentralManagerStatePoweredOn。所以它已启动,但我收到此错误。 iPhone的蓝牙也已启用。
总的来说,这会发生什么时候?我甚至不知道程序运行时发生了什么,因为我得到了看起来像冲突的消息。
答案 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
}