在CoreBluetooth Framework中扫描和处理多种服务的接收?

时间:2013-10-18 21:47:16

标签: core-bluetooth

当我使用以下方法扫描2个具有单个服务和特征的外围设备(cServiceArray是两个服务CBUUID的NSArray时):

[self.centralManager scanForPeripheralsWithServices:cServiceArray options:@{CBCentralManagerScanOptionAllowDuplicatesKey : @NO }];

我收到以下控制台响应:

2013-10-18 13:58:37.069 BlueMarco[1137:60b] didDiscoverPeripheral peripheral description <CBPeripheral: 0x14e799d0 identifier = 33C98AC7-E25E-0803-82D2-326FC8C0FDB1, Name = "ICServer_2", state = disconnected>
...
2013-10-18 13:58:37.072 BlueMarco[1137:60b] didDiscoverPeripheral Connecting to peripheral ICServer_2
...
2013-10-18 13:58:37.076 BlueMarco[1137:60b] didDiscoverPeripheral peripheral description <CBPeripheral: 0x14e75b60 identifier = E634E343-0DCF-3A4F-1F88-D4C87EA731EA, Name = "ICServer_1", state = disconnected>
...
2013-10-18 13:58:37.079 BlueMarco[1137:60b] CoreBluetooth[WARNING] <CBPeripheral: 0x14e799d0 identifier = 33C98AC7-E25E-0803-82D2-326FC8C0FDB1, Name = "ICServer_2", state = connecting> is being dealloc'ed while connecting
2013-10-18 13:58:37.080 BlueMarco[1137:60b] didDiscoverPeripheral Connecting to peripheral ICServer_1

这表示当我连接到第二台服务器时,与一个外围设备的连接断开。这是预期的行为吗?如果是这样,为什么方法scanForPeripheralsWithServices允许NSArray服务CBUUID作为参数?如果没有,有人可以告诉我如何扫描和处理多种服务的接收吗?

1 个答案:

答案 0 :(得分:1)

显示CoreBluetooth[WARNING]的行表示您没有对相关的CBPeripheral对象保留强引用,因此即使正在进行连接操作,它也会被取消分配。

确保只要您使用CBPeripheral,就可以对其进行强有力的引用,否则系统会自动对其进行垃圾回收。在Core Bluetooth Programming Guide中可能没有强调这一点,但这是正确操作的必要条件。

相关问题