Scott
Scott

Reputation: 60

centralManagerDidUpdateState not getting called

I am not new to iOS coding but very new to BLE in iOS.

I have successfully written code in my Main View Controller to access and write to a BLE device. So all the peripheral and manager stuff is tested.

My app will get a list of BLE devices, connect to them for the serial number, disconnect from them, and then put them in a tableView. When the user selects one, I need to go to a different view and reconnect. I want to write another class as a utility to connect to the peripheral, which I am successfully passing to the utility and read and write to it in the utility. The peripheral.state is connected.

Every time I try to write to the peripheral, my code crashes. However the peripheral reports that the data was written.

So to figure out what was wrong I started to just try and read the peripheral with the same results, Crash.

I'm starting a new manager in the utility and centralManagerDidUpdateState is not getting called there. I also tried it without the manager thinking that if I knew of the peripheral, it would just work.

So, how do I get centralManager to work in the new class? Do you have to somehow stop the manager in the main class?

- (void)getPeripheralStatus:(CBPeripheral *)peripheral{

device_Info_UUID = [CBUUID UUIDWithString:kDevice_Info_SID];
security_UUID = [CBUUID UUIDWithString:kSecurity_SID];
status_UUID = [CBUUID UUIDWithString:kStatus_SID];
device_ID_char_UUID =[CBUUID UUIDWithString:kSecurity_char_DeviceID];

SHA256in = [[NSMutableString alloc]initWithString:lockMasterKey];

mgr = [[CBCentralManager alloc] initWithDelegate:self queue:nil];

peripheral.delegate = self;
[self.mgr connectPeripheral:peripheral options:nil];

This is the line works in the main controller but not in my Utility.

 [self.lock writeValue:myID forCharacteristic:charac type:CBCharacteristicWriteWithResponse];

Thanks!

Upvotes: 0

Views: 1263

Answers (1)

Y.S Jin
Y.S Jin

Reputation: 1

I am not sure passing a peripheral to other viewcontroller is a "good idea" unless you don't need further update on the peripheral. If you want a "fresh" peripheral in multiple view controller i recommend to use singleton design thus you can handle all delegates at once and reduce redundant codes.

sample code I found. https://github.com/kickingvegas/YmsCoreBluetooth

Upvotes: -1

Related Questions