2013-06-14 12 views
14

Continuo a ricevere questo errore quando eseguo il mio app che utilizza CoreBluetooth su un iPhone 5: <CBConcreteCentralManager: 0x2007d590> is not powered onQuando lo stato di CBCentralManager dovrebbe essere acceso ma mi viene comunque visualizzato un avviso "non acceso"?

Ma quando chiamo state su uno e unico oggetto CBCentralManager del mio programma, esso restituisce 5, che è CBCentralManagerStatePoweredOn. Quindi è acceso, eppure ho ricevuto questo errore. Anche il Bluetooth dell'iPhone è abilitato.

Solo in generale, quando mai accadrebbe? Non so nemmeno cosa sta succedendo quando il programma è in esecuzione perché ricevo messaggi che sembrano in conflitto.

risposta

22

È necessario attendere fino a quando il gestore centrale ottiene la richiamata da centralManagerDidUpdateState: all'avvio dell'app. In ogni altro momento, ti consiglio di verificare lo stato prima di effettuare qualsiasi chiamata di centralManager. Probabilmente stai chiamando la scansione o il recupero prima che la centrale abbia avuto la possibilità di aggiornarsi. Assicurati di chiamare i metodi solo dopo aver saputo che è acceso. Non si otterrà l'errore se si esegue il wrapping di ciascuna chiamata in caso di istruzioni che controllano prima lo stato.

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

Altrimenti basta avvolgere la centrale all'interno di un assegno di stato prima di ogni chiamata:

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

Sì, questo era il problema. Grazie. – sudo

+0

Questo ha risolto il problema per me grazie. Per qualche motivo questo mi è successo quando ho aggiornato a Xcode 5 GM simulator. – Dan

+1

Sono abbastanza sicuro che Apple non stia più supportando il supporto del simulatore BLE in Xcode 5 –