2013-04-06 13 views
13

Sto provando a connettermi a un dispositivo BTLE bluetooth. Non ho problemi a scoprire la periferica.iOS6: CBPeripheral viene deallocato durante la connessione

Tuttavia, quando si tenta di connettersi alla periferica, ho ricevuto il seguente avviso.

2013-04-05 22: 10: 36,110 CoreBluetooth [ATTENZIONE] 7DA9E322-D710-081B-4A9D-526DE546B13C, Name = "Find My Car più intelligente", IsConnected = NO> viene dealloc'ed durante la connessione

Inoltre, nessuno dei metodi delegato rilevanti sono chiamati:

didConnectPeripheral: 
didFailToConnectPeripheral: 

ho lottato con questo per ora ... prega di aiuto.

+0

Stai usando ARC? – Larme

risposta

37

Risposta breve: è necessario conservare la periferica.

Spiegazione lunga: Core Bluetooth non sa se sei interessato a questa periferica quando viene rilevata. Non è sufficiente connettersi ad esso, è necessario mantenerlo.

Aggiungere una proprietà alla classe in cui si sta facendo tutto ciò che:

@property (strong) CBPeripheral  *connectingPeripheral; 

e quindi assegnare le periferiche a questa proprietà quando il dispositivo viene scoperto, prima di tornare da didDiscoverPeripheral:

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI 
{ 
    DDLogVerbose(@"Discovered peripheral: %@ advertisement %@ RSSI: %@", [peripheral description], [advertisementData description], [RSSI description]); 

    [central connectPeripheral:peripheral options:nil]; 
    self.connectingPeripheral = peripheral; 
} 
+0

Questo ha fatto il trucco! Questo mi ha fatto impazzire ... Grazie mille! – user2247438

+4

Si prega di approvare la risposta (il segno di spunta verde accanto ad essa). Aiuta la gente a sapere che questa risposta funziona e io a ottenere più punti e badge;) – sarfata

+0

Ho lo stesso problema. Sto mantenendo il riferimento in un array ma quando provo a connetterti ottengo lo stesso errore. @property NSMutableArray * heartRateMonitors; [self setHeartRateMonitors: [[NSMutableArray alloc] init]]; [[auto heartRateMonitors] addObject: peripheral]; Se lo memorizzo in una singola variabile come nell'esempio, il problema scompare. Qualche idea su cosa ho fatto di sbagliato? –