次のように周辺機器をスキャンします。
NSDictionary *scanOptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO]
forKey:CBCentralManagerScanOptionAllowDuplicatesKey];
// Scan for peripherals with given UUID
[cm scanForPeripheralsWithServices:[NSArray arrayWithObject:HeliController.serviceUUID] options:scanOptions]
問題ありません。周辺機器が見つかり、接続できました。ご覧のとおり、複数のペリフェラルを許可しないようにしていCBCentralManagerScanOptionAllowDuplicatesKey
ますが、コールバックが 2 回発生することがあります。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
2回発生すると、このメソッドにservice
なりますが、そうではありません(UUID、名前はまだ正しいです)。nil
peripheral
電話を再起動するか、ネットワーク設定をリセットすると、問題が一時的に修正されます。
私は本当にこれを修正する必要があります!ありがとうございました