CoreBluetooth长特征CBATTErrorDomain Code = 11“属性不长

时间:2014-02-12 13:43:58

标签: ios core-bluetooth

我有一个包含大量数据(~200字节)的特征值

周边

_ch = [[CBMutableCharacteristic alloc] initWithType:_chUUID
                                      properties:CBCharacteristicPropertyRead
                                      value:nil                                                                 
                                      permissions:CBAttributePermissionsReadable ];

请求此值时,将调用didRecieveRequest回调:

-(void) peripheralManager:(CBPeripheralManager *)peripheral didReceiveReadRequest:(CBATTRequest *)request {

if ([request.characteristic.UUID isEqual:_chUUID]) {
    if (request.offset > _data.length) {
        [_peripheralManager respondToRequest:request withResult:CBATTErrorInvalidOffset];
        return;
    }
    else {
        // Return the data
        request.value = [_data subdataWithRange:NSMakeRange(request.offset, _data.length - request.offset)];
        [_peripheralManager respondToRequest:request withResult:CBATTErrorSuccess];
    }
}

这几乎是Apple的例子。

在中央方面,当调用didUpdateValueCorCharacteristic:回调时,我收到错误

Error Domain=CBATTErrorDomain Code=11 "The attribute is not long."

我知道我可以使用Notify机制自己对数据进行分块,如WWDC 2012所示。但这不是一个选项,因为我不负责中央代码。

我认为应该多次调用didReceiveReadRequest:(增加偏移量),因为CB Framework应该处理分块,对吧?我在这里想念一下吗?

干杯

0 个答案:

没有答案