目标 C:按特定顺序阅读特征

Posted

技术标签:

【中文标题】目标 C:按特定顺序阅读特征【英文标题】:ObjectiveC: Reading Characteristics in a particular order 【发布时间】:2017-01-23 10:23:05 【问题描述】:

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

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

目前如果我使用代码发现一个新特性

[peripheral discoverCharacteristics:@[[CBUUID UUIDWithString:MyUUID_1]] forService:service];

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

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

有没有办法从服务中清除发现的特征,以便 didDiscoverCharacteristicsForService 内循环的唯一特征是 discoverCharacteristics 调用所需的特征/p>

【问题讨论】:

【参考方案1】:

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

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

之外读/写它的值

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

    发现您对服务感兴趣的所有特征。 一旦发现所有这些特征,请阅读第一个并等待答案。 然后阅读第二个,等待答案。

一种方法是将这些步骤包装在NSOperations 中,您可以创建一个新的委托协议来帮助您或使用“NSNotificationCenter”

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

【讨论】:

非常感谢您的回复以及回复的速度。您的意思是我应该发现服务,然后使用 discoverCharacteristics 调用发现我可能需要的所有特征。然后在回调中 didDiscoverCharacteristicsForService 只是按照我想要的顺序读取它们?那么 你不一定要阅读didDiscoverCharacteristicsForService里面的特征。您可以使用委托或 NSOperations 包装所有内容。我会尝试更新我的第一篇文章。 所以,我的问题是调用可能是FFF1 -> FFF2 -> FFF3,而第二次可能是FFF5 -> FFF3 -> FFF2 循环发现特征。把你感兴趣的收藏在一些收藏中。 (dict, set, array) 当你聚合了你感兴趣的所有特征后,跳出循环,继续读写你认为必要的特征。

以上是关于目标 C:按特定顺序阅读特征的主要内容,如果未能解决你的问题,请参考以下文章

c++ - 按特定顺序排列向量元素

按特定表顺序选择三个表

使用 ggplot 按特定顺序保持图例和 y 轴

如何按特定顺序从 select 中执行 Oracle SQL 更新?

CONVERT_TEXT(转换为可排序格式)

Java深入学习12:线程按目标顺序执行以及Lock锁和Condiiton接口