Je dois me reconnecter périodiquement à un périphérique, mais j'essaie de recréer la connexion. D'abord, mes balayages centraux pour l'UUID des périphériques, puis il se connecte, puis il stocke le périphérique.UUID dans une variable CFUUIDRef, puis se déconnecte. Ensuite, pour se reconnecter, il récupère l'UUID de la variable, puis se bloque avec "EXC_BAD_ACCESS" quand il fait retreivePeripherals, ou un peu plus tard quand il fait le didRetrievePeripherals suivant.iOS Bluetooth retrievePeripherals provoque un plantage EXC_BAD_ACCESS
Peut-être que je ne stocke pas l'UUID correctement, mais je ne vois pas le bogue. Merci.
est ici le code ..........
-(void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral
{
/////////////////////// C E N T R A L C O N N E C T E D P E R I P H E R A L //////////////////////
[self.centralManager stopScan];
// Make sure we get the discovery callbacks
peripheral.delegate = pwr_tx_management;
switch(PWR_TX_manager.present_operation)
{
case POLLING_FOR_GENERIC_DVINEWAVE_DEVICE:
if(dbg_ev) printf("1");
// Add new record for connection device to local system status database:
update_device_record(&packed_ad_record ); // ==> device_record_index
// Store peripheral UUID for later, perioed re-connection for polling:
area_device_status[ device_area ][ device_record_index ].peripheral_UUID = peripheral.UUID;
// uses declaration: CFUUIDRef peripheral_UUID;
// Disconnect: !!!
[self.centralManager cancelPeripheralConnection: peripheral];
break;
case OPERATION_SPECIFIC_POLLING:
NSLog(@"(7) didConnectPeripheral ");
if(dbg_ev) printf("2");
// Proceed with reading device's status and updating local database:
[peripheral discoverServices:nil]; // request service, characteristics, then request device send its packed status record
break;
default:
break;
}
}
// Connects to device specificed by index next_dbase_record .
void connect_specific_device(void)
{
NSLog(@"(5) connect_specific_device - next_dbase_record = %d", next_dbase_record);
CFUUIDRef uuid = area_device_status[ device_area ][ next_dbase_record ].peripheral_UUID;
if(uuid)
{
// Request call to didRetrievePeripherals() with CBPeripheral:
[pwr_tx_management.centralManager retrievePeripherals:[NSArray arrayWithObject: (id)CFBridgingRelease(uuid)]]; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< crashes here with: Thread 1: EXC_BAD_ACCESS
}
else
{
NSLog(@" - missing area_device_status[][].peripheral_UUID ");
}
}
// Iniates connection to peripheral device specified before by retrievePeripherals.
- (void) centralManager:(CBCentralManager *)central didRetrievePeripherals:(CBPeripheral *)peripheral
{
NSLog(@"(6) didRetrievePeripherals");
[central connectPeripheral:peripheral options:nil];
}
Donc je ne comprends pas vraiment ce que vous dites. retrieveConnectedPeriphs n'attrape que les périphériques auxquels vous êtes déjà connecté. Est-ce ce que vous vouliez faire? –