CoreBluetooth framework'ü kullanmaya çalışıyorum ve kodun daha iyi korunmasını sağlamak için bir yardımcı sınıf (btHelper) oluşturdum. Sorun, bu yardımcı sınıfta, delege yöntemlerinin artık her şeyin büyük bir sınıfa sokulduğu gibi orijinal olarak adlandırılmalarıdır. Evet Delege yöntemini yardımcı sınıfın .h bölümünde ayarlamıştım ve evet CBCentralManager temsilcisini kendi kendine ayarlamıştım. Her şeyi bir sınıfta olduğu gibi hemen hemen herşeyi yaptım. Ana iş parçacığı ile ilgili bir şey olduğuna inanıyorum ama bu konuda çok az deneyimim var.Temsilci farklı iş parçacığı üzerinde çağrılmadı
Özellikle, denilen istediğim temsilci yöntemi
-(void)centralManagerDidUpdateState:(CBCentralManager *)central
kimse bu yardımcı sınıfında olması gerektiği gibi çalışan temsilci çağrı almak için ne yapması gerektiğini söyleyebilir misin nedir? Teşekkürler!
PrimaryViewController sınıf ve btHelper sınıf
btHelper.m aşağıdaki
-(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 yöneticinizin gerçekten bir şey yaptığını emin misiniz? Örneğin. scanForPeripheralsWithServices işlevini çağırarak? – Macondo2Seattle
IBAction'ınıza bir kesme noktası koyabilir ve açılıp açılmadığını görebilir misiniz? – Spectravideo328
@ BlackRider Bir CBCentralManager'ın başlatılması, otomatik olarak centralManagerDidUpdateState temsilci yöntemini çağırmalıdır. Bu yöntem, Bluetooth durumunu belirlemede çok önemlidir (örn. Bluetooth LTE'nin cihazda desteklenip desteklenmediği). Oradan, ve bluetooth etkinleştirildiğinde, bir tarama gibi bir yöntem çağırabilirForPeripheralWithServices – Teddy13