2013-04-06 57 views
13

我試圖連接到藍牙BTLE設備。我沒有發現外設的問題。iOS6:CBPeripheral正在被釋放時連接

但是,當我嘗試連接到外設時,收到以下警告。

2013年4月5日22:10:3​​6.110 CoreBluetooth [警告] 7DA9E322-D710-081B-4A9D-526DE546B13C,名稱= 「查找我的汽車更聰明」,IsConnected = NO>正在被同時連接dealloc'ed

此外,無論是相關的委託方法被稱爲:

didConnectPeripheral: 
didFailToConnectPeripheral: 

我一直是這樣的小時的奮力... 請幫助。

+0

你在使用ARC嗎? – Larme 2013-04-06 12:02:28

回答

37

簡答:您需要保留外設。

冗長的解釋:核心藍牙並不知道當你發現這個外設時你是否感興趣。連接到它是不夠的,你需要保留它。

一個屬性添加到您正在做的所有類:

@property (strong) CBPeripheral  *connectingPeripheral; 

,然後分配外設到這個屬性的設備被發現的時候,你從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

這個伎倆!這一直讓我瘋狂......非常感謝! – user2247438 2013-04-10 00:27:15

+4

請批准答案(旁邊爲綠色勾號)。它可以幫助人們知道這個答案有效,我可以獲得更多積分和徽章;) – sarfata 2013-04-10 12:18:59

+0

我遇到同樣的問題。我保持數組中的引用,但是當我嘗試連接時,我得到了同樣的錯誤。 @property NSMutableArray * heartRateMonitors; [self setHeartRateMonitors:[[NSMutableArray alloc] init]]; [[self heartRateMonitors] addObject:peripheral]; 如果我把它像你的例子一樣存儲在一個單獨的變量中,問題就會消失。任何想法我做錯了什麼? – 2013-06-12 15:56:22