Ich versuche, das CoreBluetooth-Framework zu verwenden, und ich habe eine Hilfsklasse (btHelper) erstellt, um Code wartbarer und so zu machen.Delegat nicht auf anderen Thread
Das Problem ist, dass in dieser Helper-Klasse die Delegate-Methoden nicht mehr so aufgerufen werden, wie sie ursprünglich waren, als alles in große Klasse versetzt wurde. Ja, ich habe die Delegate-Methode in .h der Hilfsklasse festgelegt und ja, ich habe den Objekt CBCentralManager Delegat auf self gesetzt. Ich habe fast alles so gemacht wie in einer Klasse. Ich glaube, es hat etwas mit dem Hauptfaden zu tun, aber ich habe sehr wenig Erfahrung in diesem.
Insbesondere die delegierte Methode, die ich genannt will, ist
-(void)centralManagerDidUpdateState:(CBCentralManager *)central
Kann jemand bitte sagen Sie mir, was ich tun muss delegieren Berufung zum Laufen zu bringen, wie es in dieser Hilfsklasse sollte? Danke!
Das Folgende ist die PrimaryViewController Klasse und die btHelper Klasse
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];
}
Sind Sie sicher, dass Ihr Bluetooth-Manager tatsächlich etwas tut? Z.B. durch den Aufruf von 'scanForPeripheralsWithServices'? – Macondo2Seattle
Kannst du einen Haltepunkt in deine IBAction setzen und sehen, ob sie stolpert? – Spectravideo328
@BlackRider Die automatische Initialisierung eines CBCentralManager sollte die Delegate-Methode centralManagerDidUpdateState aufrufen. Diese Methode ist entscheidend für den Status von Bluetooth (z. B. ob Bluetooth LTE auf dem Gerät unterstützt wird). Von dort, und wenn Bluetooth aktiviert ist, kann man eine Methode wie scanForPeripheralWithServices anrufen – Teddy13