【发布时间】:2014-01-06 00:17:33
【问题描述】:
我正在尝试使用 CoreBluetooth 框架,并且我创建了一个帮助类 (btHelper) 以使代码更易于维护等。
问题在于,在这个帮助类中,委托方法不再像原来那样被调用,当所有东西都被压缩到大类中时。是的,我已经在助手类的 .h 中设置了委托方法,是的,我已经将对象 CBCentralManager 委托设置为 self。我所做的几乎所有事情都和在一个班级里时一样。 我相信它与主线程有关,但我在这方面的经验很少。
具体来说,我要调用的委托方法是
-(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];
}
【问题讨论】:
-
您确定您的蓝牙管理器确实在做某事吗?例如。致电
scanForPeripheralsWithServices? -
你能在你的 IBAction 中放一个断点,看看它是否跳闸吗?
-
@BlackRider 自动启动 CBCentralManager 应该调用委托方法 centralManagerDidUpdateState。此方法对于确定蓝牙状态至关重要(例如,设备是否支持蓝牙 LTE)。从那里,如果启用了蓝牙,则可以调用类似 scanForPeripheralWithServices 的方法
-
@Spectravideo328 绊倒是什么意思?崩溃?我已经放置了断点,除了没有调用委托方法外,一切都按原样进行。还有其他建议吗?谢谢
标签: ios objective-c delegates core-bluetooth cbcentralmanager