你如何创build一个可变特征的描述符?

CBMutableDescriptor:initWithType:value:的文档CBMutableDescriptor:initWithType:value:表示为typesparameter passing一个“标识特性的128位UUID”。 然后继续说你应该只使用CBUUIDCharacteristicUserDescriptionStringCBUUIDCharacteristicFormatString中的一个作为types参数。 最后,没有办法给描述符添加一个可变的特性。

看来参数是做两个互斥的东西。 一方面,它被用来告诉O / S描述符适用于哪个特性,另一方面是用来设置描述符的types。 第二个更有意义,但是如何将描述符添加到特征?

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

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

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

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

…目前仅支持特性用户描述和特性显示格式描述符。 特性扩展属性和客户端特性configuration描述符将在发布父服务时自动创build,具体取决于特性本身的属性。

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

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

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

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