Ios5 CoreBluetooth写入值:forDescriptor:问题

Ios5 CoreBluetooth写入值:forDescriptor:问题,ios5,descriptor,core-bluetooth,Ios5,Descriptor,Core Bluetooth,我的CoreBluetooth应用程序需要启用客户端特征配置描述符中的“指示位”。以下是我所做的: 开始扫描 开始连接到设备 调用discoverServices 在回调中调用发现特性 -(无效)外围设备:(CBPeripheral*)外围设备DID发现服务:(N错误*)错误 调用discoverDescriptorsForCharacteristic内部回调 -(void)外围设备:(CBPeripheral*)外围设备DID发现特性服务:(CBService*)服务错误:(NSError*)

我的CoreBluetooth应用程序需要启用客户端特征配置描述符中的“指示位”。以下是我所做的:

  • 开始扫描
  • 开始连接到设备
  • 调用
    discoverServices
  • 在回调中调用
    发现特性

    -(无效)外围设备:(CBPeripheral*)外围设备DID发现服务:(N错误*)错误

  • 调用
    discoverDescriptorsForCharacteristic
    内部回调

    -(void)外围设备:(CBPeripheral*)外围设备DID发现特性服务:(CBService*)服务错误:(NSError*)错误

  • 内部回调

    -(无效)外围设备:(CBPeripheral*)外围设备DID发现描述器特征:(CBCharacteristic*)特征错误:(NSError*)错误

  • 我打电话:

            if ( [[descriptor.UUID representativeString] isEqualToString:@"2902" ] )
            {
                const unsigned char raw_data[] = {0x02};
                NSData *myData = [NSData dataWithBytes: raw_data length: 2];
                [self.cBCP writeValue:myData forDescriptor:descriptor];
            }
    
    但我的应用程序在
    writeVale
    中崩溃:。控制台中的错误消息为:

    无法使用写入客户端特征配置描述符 这个方法


    有什么想法吗?谢谢

    问题在于,您不能像以前那样使用writeValue:forDescriptor:方法来写入客户端配置描述符(UUID=2902)的值


    相反,您应该使用CBPeripheral类的setNotifyValue:forCharacteristic:方法来配置客户端指示或服务器上特征值的通知。

    这是一个很老的问题,但由于没有回答,似乎该方法
    setNotifyValue(u:for:)
    会为您处理这个问题,它取决于以下charcateristics属性:

    • 仅通知:将启用通知
    • 仅指示:将启用指示
    • 指示和通知:仅启用通知
    因此,如果需要启用指示,则特征必须仅具有指示属性,并且应删除notify

    我想这背后的主要原因是指示速度要慢得多,所以iOS总是会选择最快的选项,除非需要指示


    我想知道是否有使用writeValue:forDescriptor的示例代码。实际上,我的解决方案不是使用writeValue:forDescriptor。您能解释一下如何在不使用writeValue:forDescriptor的情况下启用指示吗?我被困在同一个地方…你有什么解决办法吗?