2013-04-06 11 views
13

私はBluetooth BTLEデバイスに接続しようとしています。私は周辺機器を発見するのに何の問題もない。iOS6:接続中にCBPeripheralがdeallocされています

ただし、周辺機器に接続しようとすると、次の警告が表示されます。

2013年4月5日22:10:3​​6.110 CoreBluetooth [WARNING] 7DA9E322-D710-081B-4A9D-526DE546B13C、名前は= "私の車よりスマートを探す"、接続されているが= NO>接続中にdealloc'edされています

さらに、関連するデリゲートメソッドのどちらが呼び出される

:私は時間のためにこれで苦労してきた

didConnectPeripheral: 
didFailToConnectPeripheral: 

... 助けてください。

+0

ARCを使用していますか? – Larme

答えて

37

短い答え:周辺機器を保持する必要があります。

説明:コアBluetoothは、この周辺機器が検出されたときにこの周辺機器に関心があるかどうかを知りません。それに接続するだけでは不十分です。それを保持する必要があります。

あなたはすべてのことをやっているクラスにプロパティを追加します。その後、

@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

+4

答えを承認してください(隣の緑色のチェック)。これは、人々がこの答えが働くことと私にもう少しポイントとバッジを得ることを知らせるのに役立ちます;) – sarfata

+0

私は同じ問題を抱えています。私は配列内の参照を保持していますが、私が接続しようとすると、私はこの同じエラーを取得します。 @property NSMutableArray * heartRateMonitors; [self setHeartRateMonitors:[[NSMutableArray alloc] init]]; [[self heartRateMonitors] addObject:peripherals]; 私があなたの例のような個々の変数に格納すると、問題はなくなります。私が間違って何をしたのか? –

関連する問題