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

Mik*_*ike 5 ios core-bluetooth

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

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

是否为特征传递UUID,或者CBUUIDCharacteristicUserDescriptionStringiOS崩溃

Assertion failure in -[CBMutableDescriptor initWithType:value:], /SourceCache/CoreBluetooth_Sim/CoreBluetooth-59.3/CBDescriptor.m:25
Run Code Online (Sandbox Code Playgroud)

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

Tom*_*voy 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];
Run Code Online (Sandbox Code Playgroud)

如果您有任何疑问,请告诉我.