2013-12-16 6 views
6

Ich bekomme immer eine Fehlermeldung, dass mein CBPeripheralManager nicht eingeschaltet ist, aber in meinem Code habe ich das Gefühl, dass ich das ausgeführt habe. Hier ist mein Code:CBPeripheralManager ist nicht eingeschaltet

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    // Start up the CBPeripheralManager 
    _peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil]; 
    // Start up the CBCentralManager 

    // And somewhere to store the incoming data 
    _data = [[NSMutableData alloc] init]; 
} 

/** Required protocol method. A full app should take care of all the possible states, 
* but we're just waiting for to know when the CBPeripheralManager is ready 
*/ 
- (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral { 

    if (peripheral.state == CBPeripheralManagerStatePoweredOn) { 

     // We're in CBPeripheralManagerStatePoweredOn state... 
     NSLog(@"self.peripheralManager powered on."); 

     // ... so build our service. 

     // Then the service 
     CBMutableService *transferService = [[CBMutableService alloc] initWithType:[CBUUID UUIDWithString:TRANSFER_SERVICE_UUID] primary:YES]; 

     // And add it to the peripheral manager 
     [self.peripheralManager addService:transferService]; 
    } 
} 

Dann später rufe ich meine periphere Werbung mit einer IBAction Taste zum Starten:

- (IBAction)advertise:(id)sender { 
    [self.peripheralManager startAdvertising:@{ CBAdvertisementDataServiceUUIDsKey : @[[CBUUID UUIDWithString:TRANSFER_SERVICE_UUID]] }]; 
    [self.peripheralManager startAdvertising:@{ CBAdvertisementDataTxPowerLevelKey : @(YES)}]; 
} 
+0

Was ist der genaue Fehler? – Undo

+0

im Debugger heißt es Bluetooth_RSSItest_iPad [2235: 60b] CoreBluetooth [WARNUNG] ist nicht eingeschaltet – ian

+0

Es klingt vielleicht dumm, aber ist Bluetooth in den Geräteeinstellungen? –

Antwort

6

Sie müssen alle Ihre Anrufe wickeln, um die CBPeripheralManager in einem Zustand Check, um zu verhindere diese Warnungen. Da Sie erst zu einem unbestimmten Zeitpunkt später Werbung schalten, müssen Sie sicherstellen, dass Ihr periphererManager noch eingeschaltet und betriebsbereit ist.

- (IBAction)advertise:(id)sender 
{ 
    if(self.peripheralManager.state == CBPeripheralManagerStatePoweredOn) 
    { 
    //Now you can call advertise 
    } 
} 
+0

Das ist toll.glauben mir einen guten Anhaltspunkt, um meine Probleme zu beheben. Danke vielmals. :) – ravoorinandan

+0

es ist immer etwas nervig wie das, oder sicherzustellen, dass Sie eine iVar oder etwas Ähnliches behalten - Prost :) – NSTJ