2013-04-06 33 views
13

Tôi đang cố gắng kết nối với thiết bị Bluetooth BTLE. Tôi không có vấn đề gì khi khám phá ra thiết bị ngoại vi.iOS6: CBPeripheral đang được dealloc'ed trong khi kết nối

Tuy nhiên, khi cố gắng kết nối với thiết bị ngoại vi, tôi đã nhận được cảnh báo sau.

2013-04-05 22: 10: 36,110 CoreBluetooth [CẢNH BÁO] 7DA9E322-D710-081B-4A9D-526DE546B13C, Tên = "Tìm Smarter My Car", IsConnected = NO> đang được dealloc'ed trong khi kết nối

Hơn nữa, không ai trong số các phương pháp đại biểu có liên quan được gọi là:

didConnectPeripheral: 
didFailToConnectPeripheral: 

tôi đã đấu tranh với điều này trong nhiều giờ ... Xin vui lòng giúp.

+0

Bạn đang sử dụng ARC? – Larme

Trả lời

37

Câu trả lời ngắn: Bạn cần giữ lại thiết bị ngoại vi.

Giải thích dài: Lõi Bluetooth không biết bạn có quan tâm đến thiết bị ngoại vi này khi nó được phát hiện hay không. Kết nối với nó là không đủ, bạn cần phải giữ lại nó.

Thêm một tài sản cho lớp học nơi bạn đang làm tất cả những gì:

@property (strong) CBPeripheral  *connectingPeripheral; 

Và sau đó gán thiết bị ngoại vi vào thuộc tính này khi thiết bị được phát hiện, trước khi bạn trở về từ 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

Điều đó đã làm được điều đó! Điều này đã khiến tôi phát điên ... Cảm ơn nhiều! – user2247438

+4

Vui lòng phê duyệt câu trả lời (dấu chọn màu xanh lá cây bên cạnh nó). Nó giúp mọi người biết rằng câu trả lời này hoạt động và tôi để có thêm một số điểm và phù hiệu;) – sarfata

+0

Tôi đang gặp vấn đề tương tự. Tôi đang giữ tham chiếu trong một mảng nhưng khi tôi cố gắng kết nối, tôi nhận được lỗi này. @property NSMutableArray * heartRateMonitors; [self setHeartRateMonitors: [[NSMutableArray alloc] init]]; [[self heartRateMonitors] addObject: ngoại vi]; Nếu tôi lưu trữ nó trong một biến riêng lẻ như ví dụ của bạn thì vấn đề sẽ biến mất. Bất kỳ ý tưởng những gì tôi đã làm sai? –

Các vấn đề liên quan