我有一个包含大量数据(~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应该处理分块,对吧?我在这里想念一下吗?
干杯