2013-04-06 8 views
13

Ich versuche, eine Verbindung zu einem Bluetooth BTLE-Gerät herzustellen. Ich habe kein Problem, das Peripheriegerät zu entdecken.iOS6: CBPeripheral wird beim Verbinden freigegeben

Wenn ich jedoch versuche, eine Verbindung zum Peripheriegerät herzustellen, erhalte ich die folgende Warnung.

2013-04-05 22: 10: 36,110 CoreBluetooth [WARNUNG] 7DA9E322-D710-081B-4A9D-526DE546B13C, Name = "Find My Car Smarter", IsConnected = NO> ist dealloc'ed, während Verbindungs

Darüber hinaus sind weder der relevanten Delegatmethoden genannt:

didConnectPeripheral: 
didFailToConnectPeripheral: 

ich habe stundenlang mit diesem zu kämpfen ... Bitte helfen.

+0

Benutzt du ARC? – Larme

Antwort

37

Kurze Antwort: Sie müssen das Peripheriegerät behalten.

Lange Erklärung: Core Bluetooth weiß nicht, ob Sie an diesem Peripheriegerät interessiert sind, wenn es entdeckt wird. Die Verbindung zu ihm ist nicht genug, Sie müssen es behalten.

eine Eigenschaft der Klasse hinzufügen, wo Sie alles, was zu tun sind:

@property (strong) CBPeripheral  *connectingPeripheral; 

Und dann die periphere dieser Eigenschaft zuweisen, wenn das Gerät entdeckt wird, bevor Sie von didDiscoverPeripheral zurück:

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

Das hat den Trick gemacht! Das hat mich verrückt gemacht ... Vielen Dank! – user2247438

+4

Bitte bestätigen Sie die Antwort (das grüne Häkchen daneben). Es hilft den Leuten zu wissen, dass diese Antwort funktioniert und ich weitere Punkte und Abzeichen bekomme;) – sarfata

+0

Ich habe das gleiche Problem. Ich behalte die Referenz in einem Array, aber wenn ich versuche, eine Verbindung herzustellen, bekomme ich denselben Fehler. @property NSMutableArray * heartRateMonitors; [self setHeartRateMonitors: [[NSMutableArray alloc] init]]; [[self heartRateMonitors] addObject: peripheral]; Wenn ich es in einer individuellen Variablen wie Ihr Beispiel speichern, verschwindet das Problem. Irgendeine Idee, was ich falsch gemacht habe? –

Verwandte Themen