7

我想使用 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 中位置数组中的值映射到我的 Objective-c 类的属性中。到目前为止,映射看起来像这样:

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

现在如何添加纬度/经度映射?我尝试了各种方法,但都不起作用。例如:

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

有没有办法position[0]将 JSON 映射到latitude我的对象中?

4

1 回答 1

3

简短的回答是否定的——键值编码不允许这样做。对于集合,仅支持 max、min、avg、sum 等聚合操作。

您最好的选择可能是向 NOSearchResult 添加一个 NSArray 属性:

// 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

并像这样定义映射:

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

之后,您可以从坐标手动分配纬度和经度。

编辑:进行纬度/经度分配的好地方可能在对象加载器委托中

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

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects;
于 2011-07-17T12:55:52.393 回答