2015-04-16 2 views
1

Я пытаюсь подключиться к периферийным устройствам устройства BlueTooth LE с помощью простого (очень похожего на приложение Hello World) OSX.Подключиться к периферии устройства Bluetooth LE от приложения OSX

Я следую линиям руководства 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 метод объекта делегата, но если я запускаю шаг за шагом отладки с простой точкой излома это делает.

Должен ли я добавить некоторые другие параметры сканирования? Как я могу проверить, правильно ли выполнено соединение?

+1

Вам необходимо убедиться, что вы сохранили локальную копию CBPeripheral. –

+0

Сохранение локальной копии CBPeripheral делает мое приложение работоспособным. Я не понимаю, почему, но это работает! Спасибо. – alesdario

ответ

-1

Постарайтесь дождаться события, которое говорит о том, что сканирование действительно прекратилось. Затем подключитесь к периферийному устройству. Возможно, в стеке iOS BLE недостаточно времени, чтобы остановить сканирование и когда он пытается подключиться к нему, потому что он еще не достиг состояния «бездействия».

Это объясняет, почему это работает при отладке шаг за шагом: после выполнения stopScan и до того, как вы выполните вручную connectPeripheral, достаточно времени, чтобы LE Controller обработал первую команду.

Хотя в обычной архитектуре стека сообщения должны быть поставлены в очередь.

EDIT: В качестве альтернативы добавьте короткую задержку в несколько миллисекунд между двумя вызовами стека.

Смежные вопросы