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, имя по-прежнему правильно).

Перезагрузка телефона или сброс настроек сети временно устраняет проблему.

Мне действительно нужно это исправить! Спасибо

Ответы на вопрос(2)

Ваш ответ на вопрос