如何为可变特征创建描述符?

时间:2013-09-04 19:51:13

标签: ios core-bluetooth

CBMutableDescriptor:initWithType:value:的文档说是为类型参数传递“标识特征的128位UUID”。然后它继续说你应该只使用CBUUIDCharacteristicUserDescriptionStringCBUUIDCharacteristicFormatString中的一个作为类型参数。最后,没有方法可以将描述符添加到可变特征中。

看来该参数正在做两个相互排斥的事情。一方面,它用于告诉O / S描述符适用的特征,另一方面,它用于设置描述符的类型。第二个更有意义,但是如何将描述符添加到特征中呢?

是否传递特征的UUID或CBUUIDCharacteristicUserDescriptionString,iOS崩溃

Assertion failure in -[CBMutableDescriptor initWithType:value:], /SourceCache/CoreBluetooth_Sim/CoreBluetooth-59.3/CBDescriptor.m:25

创建CBMutableDescriptor并将其添加到CBMutableCharacteristic的正确方法是什么?

1 个答案:

答案 0 :(得分:5)

你对文档是正确的。但为了让大家清楚,这里有一个CBDescriptor.h中的引文:

  

...仅限特征用户描述和特征   目前支持演示文稿格式描述符。该   特征扩展属性和客户端特征   配置描述符将自动创建   发布父服务,具体取决于   特征本身。

换句话说,除非你设置这些描述符,否则系统会阻止你(这就是你断言失败的原因)。

所以说你想使用特征用户描述描述符,你会这样做:

CBUUID *yourCharUUID = [CBUUID UUIDWithString:@"c07c5050-15a0-11e3-8ffd-0800200c9a66"];//whatever UUID your using

CBMutableCharacteristic *yourCharacteristic = [[CBMutableCharacteristic alloc]initWithType:yourCharUUID properties:CBCharacteristicPropertyWriteWithoutResponse value:nil permissions:perms];

CBUUID *userDescriptionUUID = [CBUUID UUIDWithString:CBUUIDCharacteristicUserDescriptionString];//or set it to the actual UUID->2901

CBMutableDescriptor *yourDescriptor = [[CBMutableDescriptor alloc]initWithType:userDescriptionUUID value:@"myDescriptorValue"];

yourCharacteristic.descriptors = @[yourDescriptor];

如果您有任何问题,请与我们联系。