2012-05-21 6 views
5

Es posible obligar al asignador de objetos RestKit a mapear a un objeto anidado específico en una matriz mediante la sintaxis mapKeyPath dot?Asignación anidada de RestKit al elemento de matriz específico

Aquí está la respuesta que estoy tratando de asignar

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

Sólo estoy interesado en el primer punto que alguna vez se volvió a field_region.

¿Cuál es la forma correcta de asignar este mapa?

he intentado varias iteraciones de:

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

y sigo obteniendo errores similar a:

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' 

invoco la asignación a través de:

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

¿Alguna idea? ¡Más apreciado!

Respuesta

0

creo que tendrá que tener un mapeo para cada nivel, por lo que la asignación de objetos de entidad contiene un objeto de región de campo. la asignación de objetos de la región de campo contiene un objeto und. und object mapping contains item, etc ...

Solo he hecho esto con las respuestas del kit de descanso json anidado, no con xml, pero tuve que crear una asignación para cada nivel.

algo como esto (concedida esto es incompleta porque se necesitaría una relación de todos los niveles)

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

RKObjectMapping* regionmapping = [RKObjectMapping mappingForClass:[Region class]]; 
[regionmapping mapKeyPath:@"und" toRelationship:@"undArrays" withMapping:undMapping]; 
+0

gracias. Analicé esta asignación dentro del mapeo, pero pensé que sería más inteligente (y más fácil) simplificar la respuesta del servidor. – Ted

Cuestiones relacionadas