5

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

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

无论您传递特征的 UUID 还是CBUUIDCharacteristicUserDescriptionString,iOS 都会崩溃

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

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

4

1 回答 1

5

您对文档是正确的。但为了让每个人都清楚,这里是 CBDescriptor.h 中的引文:

...目前仅支持 Characteristic User Description 和 Characteristic Presentation Format 描述符。特性扩展属性和客户端特性配置描述符将在父服务发布时自动创建,具体取决于特性本身的属性。

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

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

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];

如果您有任何问题,请告诉我。

于 2013-09-04T20:42:23.943 回答