2017-01-23 101 views
0

我对客观C编程相当陌生,所以请原谅,如果这是一个非常简单的问题。ObjectiveC:按特定顺序读取特征

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

目前,如果我发现一个新的特征相应代码

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

我可以正确地发现特性,可以读出值。我的问题在于,如果在发现第一个特征之后,然后尝试使用与上述相同的代码发现第二个特征,但是使用MyUUID_2

didDiscoverCharacteristicsForService方法被称为服务既具有MyUUID_1MyUUID_2特性。因此,当循环访问方法中的if循环时,第一个特征会再次使用。

有没有办法从服务清除所发现的特点,因此,唯一的特点didDiscoverCharacteristicsForService内循环通过被称为由discoverCharacteristics

回答

0

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

当您拨打discoverServicesdiscoverCharacteristics方法时,您将收回CBServiceCBCharacteristics的实例。您可以依赖这些实例(也称为有效),直到外设断开连接。因此,一旦发现某个特征,就可以保留对该特征的引用,并在回调之外读取/写入其值。didDiscoverCharacteristicsForService:

如果您希望能够以预定义顺序读取特征,则首先需要在两个步骤:

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

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

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

非常感谢您的回复,并为这样做的速度。 您的意思是我应该发现服务,然后使用discoverCharacteristics调用发现我可能需要的所有特征。然后在回调didDiscoverCharacteristicsForService里面按照我想要的顺序读取它们? Then –

+0

您不必读'didDiscoverCharacteristicsForService'中的特征。您可以使用委托或NSOperations包装所有内容。我会尽力更新我的第一篇文章。 – yageek

+0

因此,我的问题是,呼叫可能是FFF1 - > FFF2 - > FFF3,而第二次可能是FFF5 - > FFF3 - > FFF2 –