Вложенное сопоставление RestKit с определенным элементом массива

Можно ли заставить средство отображения объектов RestKit сопоставляться с конкретным вложенным объектом в массиве с помощью точечного синтаксиса mapKeyPath?

Вот ответ, который я пытаюсь сопоставить

<result is_array="true">
  <item>
     <_field_data>
        <nid>
           <entity>
              <field_region>
                 <und is_array="true">
                    <item>
                       <value>1</value>
                    </item>
                 </und>
              </field_region>
....

Меня интересует только первый элемент, который когда-либо будет возвращен для field_region.

Каков правильный способ отобразить это?

Я пробовал различные итерации:

RKManagedObjectMapping *record = [RKManagedObjectMapping mappingForClass:[MyRecordClass class] inManagedObjectStore:objManager.objectStore];
[record mapKeyPath:@"_field_data.nid.entity.field_region.und.0.item.value" toAttribute:@"region"];

и я продолжаю получать ошибки, похожие на:

T restkit.object_mapping:RKObjectMappingOperation.m:152 Found transformable value at keyPath '_field_data.nid.entity.field_region.und.0.item.value'. Transforming from type '__NSArrayI' to 'NSNumber'
W restkit.object_mapping:RKObjectMappingOperation.m:232 Failed transformation of value at keyPath '_field_data.nid.entity.field_region.und.0.item.value'. No strategy for transforming from '__NSArrayI' to 'NSNumber'

Я вызываю сопоставление через:

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:kMyResourcePath usingBlock:^(RKObjectLoader* loader) {
    loader.objectMapping = [[RKObjectManager sharedManager].mappingProvider objectMappingForClass:[MyRecordClass class]];
    loader.method = RKRequestMethodGET;
    loader.delegate = self;
    loader.targetObject = nil;
}];

Есть идеи? Самый ценный!


person Ted    schedule 21.05.2012    source источник


Ответы (1)


думаю, вам нужно будет иметь сопоставление для каждого уровня, поэтому сопоставление объекта объекта содержит объект области поля. Отображение объекта области поля содержит объект und. und сопоставление объектов содержит элемент и т. д.

Я сделал это только с вложенными ответами json rest kit, а не с xml, но мне пришлось создать сопоставление для каждого уровня.

что-то вроде этого (при условии, что это неполное, потому что вам понадобится отношение для каждого уровня)

RKObjectMapping* undMapping = [RKObjectMapping mappingForClass:[UND class]];
[und mapKeyPath:@"item" toAttribute:@"item"];

RKObjectMapping* regionmapping = [RKObjectMapping mappingForClass:[Region class]]; 
[regionmapping mapKeyPath:@"und" toRelationship:@"undArrays" withMapping:undMapping];
person Augie    schedule 09.07.2012
comment
Благодарю. я изучил это сопоставление внутри сопоставления, но подумал, что разумнее (и проще) упростить ответ сервера. - person Ted; 03.08.2012