Corebluetooth central manager callback didDescubrirPeripheral dos veces

Escaneo para mi periférico de esta manera:

NSDictionary *scanOptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO] 
                                                            forKey:CBCentralManagerScanOptionAllowDuplicatesKey];
        // Scan for peripherals with given UUID
        [cm scanForPeripheralsWithServices:[NSArray arrayWithObject:HeliController.serviceUUID] options:scanOptions]

No hay problema allí, encuentro el periférico y puedo conectarme a él. Como puedes ver lo doyCBCentralManagerScanOptionAllowDuplicatesKey conbool NO no permitir más de un periférico, pero a veces eldidDiscoverPeripheralla devolución de llamada se activa dos veces.

- (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");
}
}

Algunas veces me dan

Discovered
Already discovered

como salida en mi consola, y la mayoría de las veces solo elDiscoveredmensaje se muestra.

En mi delegado periférico descubro primero los servicios, que luego llamo[peripheral discoverCharacteristics y la devolución de llamada siempre se produce:

- (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;

    }
}

CuandodidDiscoverPeripheral ocurrir dos veces,service se convierte ennilen este método, aunqueperipheral no es (UUID, el nombre sigue siendo correcto).

Al reiniciar el teléfono o restablecer la configuración de red se soluciona el problema temporalmente.

¡Realmente necesito arreglar esto! Gracias

Respuestas a la pregunta(2)

Su respuesta a la pregunta