Der Rückruf von Corebluetooth Central Manager hat "Peripheral" zweimal entdeckt

So scanne ich nach meinem Peripheriegerät:

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

Kein Problem dort, ich finde das Peripheriegerät und kann mich damit verbinden. Wie Sie sehen, gebe ich esCBCentralManagerScanOptionAllowDuplicatesKey mitbool NO nicht mehr als ein Peripheriegerät zulassen, aber manchmal diedidDiscoverPeripheralRückruf wird zweimal ausgelöst.

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

Manchmal bekomme ich

Discovered
Already discovered

als ausgabe in meiner konsole und meistens nur dieDiscoveredNachricht zeigt.

In meinem Peripheriedelegierten entdecke ich zuerst Dienste, die dann anrufen[peripheral discoverCharacteristics und der Rückruf erfolgt immer:

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

    }
}

WanndidDiscoverPeripheral zweimal vorkommen,service wirdnilin dieser Methode, obwohlperipheral ist nicht (UUID, Name ist noch korrekt).

Ein Neustart des Telefons oder das Zurücksetzen der Netzwerkeinstellungen behebt das Problem vorübergehend.

Ich muss das wirklich reparieren! Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage