Когда состояние CBCentralManager будет включено, но все-таки дайте мне предупреждение "не включено"? - программирование
Подтвердить что ты не робот

Когда состояние CBCentralManager будет включено, но все-таки дайте мне предупреждение "не включено"?

Я продолжаю получать эту ошибку, когда запускаю приложение, которое использует CoreBluetooth на iPhone 5: <CBConcreteCentralManager: 0x2007d590> is not powered on

Но когда я вызываю state в моей программе один и только объект CBCentralManager, он возвращает 5, что является CBCentralManagerStatePoweredOn. Поэтому он работает, но я получаю эту ошибку. IPhone Bluetooth также включен.

В общем, когда это произойдет? Я даже не знаю, что происходит, когда программа запускается, потому что я получаю то, что похоже на конфликтующие сообщения.

4b9b3361

Ответ 1

Вы должны сначала подождать, пока centralManager не получит обратный вызов из centralManagerDidUpdateState:, когда вы загружаете приложение. Затем каждый раз я рекомендую проверять состояние перед выполнением вызовов centralManager. Вы, скорее всего, вызываете сканирование или извлечение, прежде чем центральный сможет обновить. Убедитесь, что вы только вызываете методы после того, как знаете это. Вы не получите ошибку, если вы завершите каждый вызов, если операторы, которые сначала проверяют состояние.

- (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
}