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 diedidDiscoverPeripheral
Rü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 dieDiscovered
Nachricht 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
wirdnil
in 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