У меня есть характеристическое значение, которое содержит данные для изображения. В периферийном я устанавливаю значение, подобное этому:
_photoUUID = [CBUUID UUIDWithString:bPhotoCharacteristicUUID];
_photoCharacteristic = [[CBMutableCharacteristic alloc] initWithType:_photoUUID
properties:CBCharacteristicPropertyRead
value:Nil
permissions:CBAttributePermissionsReadable];
Я понимаю, что при запросе этого значения будет вызван обратный вызов didRecieveRequest:
-(void) peripheralManager:(CBPeripheralManager *)peripheral didReceiveReadRequest:(CBATTRequest *)request {
if ([request.characteristic.UUID isEqual:_photoUUID]) {
if (request.offset > request.characteristic.value.length) {
[_peripheralManager respondToRequest:request withResult:CBATTErrorInvalidOffset];
return;
}
else {
// Get the photos
if (request.offset == 0) {
_photoData = [NSKeyedArchiver archivedDataWithRootObject:_myProfile.photosImmutable];
}
request.value = [_photoData subdataWithRange:NSMakeRange(request.offset, request.characteristic.value.length - request.offset)];
[_peripheralManager respondToRequest:request withResult:CBATTErrorSuccess];
}
}
}
Это в значительной степени связано с документацией Apple. На центральной стороне в обратном вызове didDiscoverCharacteristic у меня есть следующий код:
if ([characteristic.UUID isEqual:_photoUUID]) {
_photoCharacteristic = characteristic;
[peripheral readValueForCharacteristic:characteristic];
}
Что, в свою очередь, вызывает обратный вызов didUpdateValueCorCharacteristic:
- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error {
NSLog(@"updated value for characteristic");
if ([characteristic.UUID isEqual:_photoUUID]) {
NSArray * photos = [NSKeyedUnarchiver unarchiveObjectWithData:characteristic.value];
}
}
Все вызовы вызываются, но когда я пытаюсь перестроить массив, он поврежден, потому что не все данные переданы правильно. Я ожидаю, что callback didRecieveReadRequest будет вызываться несколько раз с различным смещением каждый раз. Однако он называется только один раз.
Мне было интересно, знает ли кто-нибудь, что я делаю неправильно?