2011-07-17 11 views
7

Me gustaría asignar un índice de matriz dado a una propiedad con RestKit (OM2). Tengo esta JSON:RestKit mapKeyPath en el índice de matriz

{ 
    "id": "foo", 
    "position": [52.63, 11.37] 
} 

la que me gustaría mapa para este objeto:

@interface NOSearchResult : NSObject 
@property(retain) NSString* place_id; 
@property(retain) NSNumber* latitude; 
@property(retain) NSNumber* longitude; 
@end 

no puedo encontrar la manera de asignar los valores de salida de la matriz de posición en mi JSON en propiedades de mi clase objetivo-c. La asignación se ve así hasta ahora:

RKObjectMapping* resultMapping = [RKObjectMapping mappingForClass:[NOSearchResult class]]; 
[resultMapping mapKeyPath:@"id" toAttribute:@"place_id"]; 

Ahora, ¿cómo puedo agregar un mapa para la latitud/longitud? Intenté varias cosas que no funcionan. ej .:

[resultMapping mapKeyPath:@"position[0]" toAttribute:@"latitude"]; 
[resultMapping mapKeyPath:@"position.1" toAttribute:@"longitude"]; 

¿Hay una manera de hacer corresponder position[0] fuera de la JSON en latitude en mi objeto?

Respuesta

3

La respuesta corta es no - key-value coding no permite eso. Para la recopilación, solo se admiten operaciones agregadas como max, min, avg, sum.

Su mejor apuesta es, probablemente, para agregar una propiedad NSArray a NOSearchResult:

// NOSearchResult definition 
@interface NOSearchResult : NSObject 
@property(retain) NSString* place_id; 
@property(retain) NSString* latitude; 
@property(retain) NSNumber* longitude; 
@property(retain) NSArray* coordinates; 
@end 

@implementation NOSearchResult 
@synthesize place_id, latitude, longitude, coordinates; 
@end 

y definir el mapeo:

RKObjectMapping* resultMapping = [RKObjectMapping mappingForClass:[NOSearchResult class]]; 
[resultMapping mapKeyPath:@"id" toAttribute:@"place_id"]; 
[resultMapping mapKeyPath:@"position" toAttribute:@"coordinates"]; 

Después de eso, se podría asignar manualmente la latitud y longitud de coordenadas.

EDIT: Un buen lugar para hacer la asignación de latitud/longitud es, probablemente, en los delegados Cargador de objetos

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObject:(id)object; 

y

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects; 
+1

Gracias - Yo ya estaba miedo de que no funcionaría. ¡La pista 'didLoadObject' fue realmente útil! – cellcortex

+2

un mejor lugar sería en getters y setters personalizados para lat y lon que manipulan la estructura de datos de matriz subyacente. – Jon

Cuestiones relacionadas