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

  • 开始扫描
  • 开始连接到设备
  • 调用discoverServices
  • 在回调内部调用discoverCharacteristics
    -(void)外围设备:(CBPeripheral *)外围设备didDiscoverServices:(NSError *)错误
  • 在回调内部调用discoverDescriptorsForCharacteristic
    -(void)外围设备:(CBPeripheral *)外围设备didDiscoverCharacteristicsForService:(CBService *)服务错误:(NSError *)错误
  • 内部回调

    -(无效)外围设备:(CBP外围设备*)外围设备didDiscoverDescriptorsForCharacteristic:(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中崩溃了:。控制台中的错误消息是:



    任何的想法?谢谢

    最佳答案

    相当老的问题,但由于未得到回答,因此似乎setNotifyValue(_:for:)方法将为您处理该问题,这取决于下面的charcateristics属性:

  • 仅通知:将启用通知。
  • 仅指示:指示将被启用。
  • 表示并通知:仅启用通知。

  • 因此,如果您需要启用指示,则特征必须仅具有指示属性,并应删除notify。

    我想这背后的主要原因是指示要慢得多,因此,除非有必要指示,否则iOS总是会选择尽可能快的选项。

    Read more on the Apple docs

    关于ios5 - CoreBluetooth writeValue :forDescriptor: issue,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13561136/

    10-16 16:43