Tôi đang cố gắng sử dụng khung CoreBluetooth và tôi đã tạo một lớp trợ giúp (btHelper) để làm cho mã dễ bảo trì hơn và như vậy.Đại biểu không được gọi theo chủ đề khác nhau
Vấn đề là trong lớp trợ giúp này, các phương thức đại biểu không còn được gọi như ban đầu khi mọi thứ được smushed vào lớp lớn. Có, tôi đã thiết lập phương thức ủy nhiệm trong .h của lớp helper và có tôi đã đặt đối tượng CBCentralManager delegate thành self. Tôi đã làm khá nhiều thứ giống như khi tất cả trong một lớp. Tôi tin rằng nó có một cái gì đó để làm với các chủ đề chính nhưng tôi có rất ít kinh nghiệm trong việc này.
Cụ thể, phương pháp đại biểu mà tôi muốn gọi là
-(void)centralManagerDidUpdateState:(CBCentralManager *)central
bất cứ ai có thể vui lòng cho tôi biết tôi phải làm gì để có được sự kêu gọi đại biểu làm việc như nó nên trong lớp helper này? Cảm ơn!
Sau đây là lớp PrimaryViewController và lớp 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];
}
Bạn có chắc chắn rằng trình quản lý bluetooth của bạn thực sự làm điều gì đó không? Ví dụ. bằng cách gọi 'scanForPeripheralsWithServices'? – Macondo2Seattle
Bạn có thể đặt điểm ngắt trong IBAction của mình và xem liệu nó có bị vấp ngã không? – Spectravideo328
@BlackRider Khởi tạo một CBCentralManager tự động nên gọi phương thức ủy nhiệm centralManagerDidUpdateState. Phương pháp này rất quan trọng trong việc xác định trạng thái Bluetooth (Ví dụ: Bluetooth LTE có được hỗ trợ trên thiết bị không). Từ đó, và nếu bluetooth được bật, người ta có thể gọi một phương thức như scanForPeripheralWithServices – Teddy13