CBPeripheralManager not included

I keep getting an error when my CBPeripheralManager is not enabled, but in my code I feel like I did. Here is my code:

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

Then later I call my peripheral device to start advertising using the IBAction button:

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

To prevent these warnings, you need to transfer all of your calls to CBPeripheralManager inside a status check. Since you simply call ads for an undetermined amount of time later, you need to make sure that your peripheral dispatcher is still on and ready to go.

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

All Articles