【问题标题】:How do you create a descriptor for a mutable characteristic?如何为可变特征创建描述符?
【发布时间】:2013-09-08 11:28:29
【问题描述】:

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 的正确方法是什么?

【问题讨论】:

    标签: ios core-bluetooth


    【解决方案1】:

    您对文档的看法是正确的。但为了让每个人都清楚,这里是 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];
    

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

    【讨论】:

    • 嗨,自定义 CBDescriptor 是否有任何选项可以启用发送值?
    猜你喜欢
    • 2013-01-01
    • 2013-11-16
    • 2012-05-30
    • 2014-05-15
    • 2015-05-11
    • 2013-06-28
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    相关资源
    最近更新 更多