Corebluetooth центральный менеджер обратного вызова сделал обнаружение периферийных дважды
Я сканирую свое периферийное устройство так:
NSDictionary *scanOptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO]
forKey:CBCentralManagerScanOptionAllowDuplicatesKey];
// Scan for peripherals with given UUID
[cm scanForPeripheralsWithServices:[NSArray arrayWithObject:HeliController.serviceUUID] options:scanOptions]
Нет проблем, я нахожу периферийное устройство и могу подключиться к нему. Как вы видите, я даю этоCBCentralManagerScanOptionAllowDuplicatesKey
сbool NO
не учитывать более одного периферийного устройства, но иногдаdidDiscoverPeripheral
обратный вызов срабатывает дважды.
- (void) centralManager:(CBCentralManager *)central
didDiscoverPeripheral:(CBPeripheral *)peripheral
advertisementData:(NSDictionary *)advertisementData
RSSI:(NSNumber *)RSSI
{
if(!discovered){
discovered = YES;
NSLog(@"Discovered");
[cm stopScan];
[scanButton setTitle:@"Connect" forState:UIControlStateNormal];
}
else if(discovered){
discovered = YES
NSLog(@"Already discovered");
}
}
Иногда я получаю
Discovered
Already discovered
как вывод в моей консоли, и в большинстве случаев толькоDiscovered
сообщение показывает.
В моем периферийном делегате я сначала обнаруживаю сервисы, которые затем вызывают[peripheral discoverCharacteristics
и обратный вызов всегда происходит:
- (void) peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error{
NSLog(@"Did discover characteristic for service %@", [service.peripheral UUID]);
for(CBCharacteristic *c in [service characteristics]){
// We never get here when peripheral is discovered twice
if([[c UUID] isEqual:myCharacteristicUUID]){
NSLog(@"Found characteristic");
self.throttleCharacteristic = c;
}
}
когдаdidDiscoverPeripheral
происходят дважды,service
становитсяnil
в этом методе, даже еслиperipheral
нет (UUID, имя по-прежнему правильно).
Перезагрузка телефона или сброс настроек сети временно устраняет проблему.
Мне действительно нужно это исправить! Спасибо