我对目标C编程相当新,所以请原谅这是一个非常简单的问题。
我通过蓝牙连接外围设备,希望能够按特定顺序读取设备特性。从一个特征返回的值将决定下一个要读取的特征。
目前,如果我使用代码
发现新特征[peripheral discoverCharacteristics:@[[CBUUID UUIDWithString:MyUUID_1]] forService:service];
我可以正确发现这个特征并且可以读取该值。我的问题是,如果在发现第一个字符之后,我尝试使用与上面相同的代码但使用 MyUUID_2 发现第二个特征。
当调用 didDiscoverCharacteristicsForService 方法时,该服务同时具有 MyUUID_1 和 MyUUID_2 特征。因此,当循环遍历方法中的if循环时,第一个特征会再次被使用。
有没有办法从服务中清除已发现的特征,因此 didDiscoverCharacteristicsForService 中唯一的特征是通过调用 discoverCharacteristics <调用所需的特征/ p>
答案 0 :(得分:0)
这个想法如下:为了能够读/写特征,您需要拥有CBService
和CBCharacteristic
的有效实例。
当您调用discoverServices
和discoverCharacteristics
方法时,您将获得CBService
和CBCharacteristics
的实例。在外围设备断开连接之前,您将能够依赖这些实例(也称为有效)。因此,一旦发现某个特征,您就可以保留对它的引用,并在回调之外读/写它的值didDiscoverCharacteristicsForService:
如果您希望能够以预定义的顺序读取特征,首先需要分两步操作:
一种方法是将这些步骤包含在NSOperations
中,您可以创建一个新的委托协议来帮助您或使用“NSNotificationCenter”
@protocol MyBLEProtocol <NSObject>
- (void) didFinishReadFirstCharacteristic;
- (void) didFinishReadSecondCharacteristic;
@end