RestKit mapKeyPath для индекса массива - PullRequest
7 голосов
/ 17 июля 2011

Я хотел бы отобразить данный индекс массива в свойство с помощью RestKit (OM2). У меня есть этот JSON:

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

который я хотел бы сопоставить с этим объектом:

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

Я не могу понять, как отобразить значения из массива позиции в моем JSON в свойствах моего класса target-c. Пока это выглядит так:

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

Теперь, как я могу добавить отображение для широты / долготы? Я пробовал разные вещи, которые не работают. e.g.:

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

Есть ли способ сопоставить position[0] из JSON с latitude в моем объекте?

1 Ответ

3 голосов
/ 17 июля 2011

Короткий ответ - нет - кодирование значения ключа этого не допускает.Для сбора поддерживаются только агрегатные операции, такие как max, min, avg, sum.

Лучше всего, вероятно, добавить свойство NSArray в 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

и определить отображение какthis:

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

После этого вы можете вручную назначать широту и долготу из координат.

EDIT: Хорошее место для назначения широты / долготы, вероятно, в делегатах загрузчика объектов

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

и

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