我正在尝试使用一个简单的(非常类似于Hello World)OSX应用程序连接到蓝牙LE设备的外围设备。
我正在遵循Apple的指南,但是当我尝试连接到外围设备时,我的应用程序无法按预期工作。
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
NSLog(@"Discovered %@", peripheral.name);
if([peripheral.name isEqualToString:@"BLE-DEVICE"]){
NSLog(@"Found BLE Device!");
[_centralManager stopScan];
NSLog(@"Scanning stopped");
peripheral.delegate = self;
[_centralManager connectPeripheral:peripheral options:nil];
}
}
问题是connectPeripheral
(最后一行)不会触发委托对象的centralManager:didConnectPeripheral
方法,但是如果我使用简单的断点运行分步调试,它会触发
我应该添加一些其他扫描选项吗?如何检查连接是否正确执行?
尝试等待告诉您扫描确实已停止的事件。然后,连接到外围设备。也许iOS BLE堆栈没有足够的时间停止扫描,并且当它尝试连接时失败,因为它尚未达到"空闲"状态。
这就解释了为什么它在逐步调试时有效:在执行stopScan
之后和手动执行connectPeripheral
之前,LE 控制器有足够的时间处理第一个命令。
尽管在正常的堆栈体系结构中,消息应该排队。
编辑:或者,在两个堆栈调用之间添加几毫秒的短延迟。