Callback centralnego menedżera Corebluetooth odbył się dwukrotnie

Skanuję w poszukiwaniu moich urządzeń peryferyjnych w ten sposób:

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

Nie ma problemu, znajduję urządzenie peryferyjne i mogę się z nim połączyć. Jak widzisz, daję toCBCentralManagerScanOptionAllowDuplicatesKey zbool NO nie dopuszczać więcej niż jednego urządzenia peryferyjnego, ale czasamididDiscoverPeripheralwywołanie zwrotne jest uruchamiane dwukrotnie.

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

Czasem dostaję

Discovered
Already discovered

jako wyjście w mojej konsoli, a najczęściej tylkoDiscoveredpokazuje wiadomość.

W moim peryferyjnym delegacie odkrywam najpierw usługi, które następnie wywołują[peripheral discoverCharacteristics a wywołanie zwrotne zawsze występuje:

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

    }
}

GdydidDiscoverPeripheral występuje dwukrotnieservice staje sięnilw tej metodzieperipheral nie jest (UUID, nazwa jest nadal poprawna).

Ponowne uruchomienie telefonu lub zresetowanie ustawień sieciowych tymczasowo rozwiązuje problem.

Naprawdę muszę to naprawić! Dziękuję Ci

questionAnswers(2)

yourAnswerToTheQuestion