Я пытаюсь использовать каркас CoreBluetooth, и я создал вспомогательный класс (btHelper), чтобы сделать код более удобным и удобным.Делегат не вызвал другую тему
Проблема заключается в том, что в этом вспомогательном классе методы делегатов больше не вызываются, как они были изначально, когда все было снесено в большой класс. Да, я установил метод делегирования в .h из класса-помощника и да, я установил объект CBCentralManager делегировать себя. Я почти все сделал так же, как когда все было в одном классе. Я считаю, что это имеет какое-то отношение к основной теме, но у меня очень мало опыта в этом.
В частности, метод делегата, который я хочу назвать это
-(void)centralManagerDidUpdateState:(CBCentralManager *)central
Может кто-нибудь пожалуйста, скажите мне, что я должен сделать, чтобы получить делегатом призвание работает, как это должно быть в этом вспомогательном классе? Спасибо!
Ниже класс PrimaryViewController и класс btHelper
btHelper.m
-(void) activateBluetooth
{
self.manager= [[CBCentralManager alloc] initWithDelegate:self queue:nil];
}
- (void)centralManagerDidUpdateState:(CBCentralManager *)central
{
//DELEGATE METHOD THAT NEVER GETS CALLED. SHOULD BE CALLED AS SOON AS self.manager is initiated
self.isAvailable=FALSE;
switch (central.state) {
case CBCentralManagerStatePoweredOff:
NSLog(@"CoreBluetooth BLE hardware is powered off");
break;
case CBCentralManagerStatePoweredOn:
NSLog(@"CoreBluetooth BLE hardware is powered on and ready");
self.isAvailable=TRUE;
break;
case CBCentralManagerStateResetting:
NSLog(@"CoreBluetooth BLE hardware is resetting");
break;
case CBCentralManagerStateUnauthorized:
NSLog(@"CoreBluetooth BLE state is unauthorized");
break;
case CBCentralManagerStateUnknown:
NSLog(@"CoreBluetooth BLE state is unknown");
break;
case CBCentralManagerStateUnsupported:
NSLog(@"CoreBluetooth BLE hardware is unsupported on this platform");
break;
default:
break;
}
}
PrimaryViewController.m
-(IBAction)connect
{
btHelper *bluetoothManager= [[btHelper alloc]init];
[bluetoothManager activateBluetooth];
}
Вы уверены, что ваш менеджер bluetooth на самом деле что-то делает? Например. путем вызова 'scanForPeripheralsWithServices'? – Macondo2Seattle
Можете ли вы установить контрольную точку в своем IBAction и посмотреть, не срабатывает ли она? – Spectravideo328
@BlackRider Инициирование CBCentralManager автоматически должно вызвать метод делегирования centralManagerDidUpdateState. Этот метод имеет решающее значение для определения состояния Bluetooth (например, поддерживается ли Bluetooth LTE на устройстве). Оттуда, и если bluetooth включен, можно вызвать метод, например scanForPeripheralWithServices – Teddy13