ObjectiveC:按特定顺序阅读特征

时间:2017-01-23 10:23:06

标签: ios objective-c bluetooth core-bluetooth cbperipheral

我对目标C编程相当新,所以请原谅这是一个非常简单的问题。

我通过蓝牙连接外围设备,希望能够按特定顺序读取设备特性。从一个特征返回的值将决定下一个要读取的特征。

目前,如果我使用代码

发现新特征
[peripheral discoverCharacteristics:@[[CBUUID UUIDWithString:MyUUID_1]] forService:service];

我可以正确发现这个特征并且可以读取该值。我的问题是,如果在发现第一个字符之后,我尝试使用与上面相同的代码但使用 MyUUID_2 发现第二个特征。

当调用 didDiscoverCharacteristicsForService 方法时,该服务同时具有 MyUUID_1 MyUUID_2 特征。因此,当循环遍历方法中的if循环时,第一个特征会再次被使用。

有没有办法从服务中清除已发现的特征,因此 didDiscoverCharacteristicsForService 中唯一的特征是通过调用 discoverCharacteristics <调用所需的特征/ p>

1 个答案:

答案 0 :(得分:0)

这个想法如下:为了能够读/写特征,您需要拥有CBServiceCBCharacteristic有效实例。

当您调用discoverServicesdiscoverCharacteristics方法时,您将获得CBServiceCBCharacteristics的实例。在外围设备断开连接之前,您将能够依赖这些实例(也称为有效)。因此,一旦发现某个特征,您就可以保留对它的引用,并在回调之外读/写它的值didDiscoverCharacteristicsForService:

如果您希望能够以预定义的顺序读取特征,首先需要分两步操作:

  1. 了解您对服务感兴趣的所有特征。
  2. 一旦发现了所有这些特征,请阅读第一个特征并等待答案。
  3. 然后阅读第二个并等待答案。
  4. 一种方法是将这些步骤包含在NSOperations中,您可以创建一个新的委托协议来帮助您或使用“NSNotificationCenter”

    @protocol MyBLEProtocol <NSObject>
    - (void) didFinishReadFirstCharacteristic;
    - (void) didFinishReadSecondCharacteristic;
    @end