RestKit mapKeyPath 到数组索引

Posted

技术标签:

【中文标题】RestKit mapKeyPath 到数组索引【英文标题】:RestKit mapKeyPath to Array index 【发布时间】:2011-07-17 08:16:32 【问题描述】:

我想使用 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"];

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

【问题讨论】:

【参考方案1】:

简短的回答是否定的——key-value coding 不允许这样做。对于采集,只支持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;

【讨论】:

谢谢 - 我已经担心它行不通了。 “didLoadObject”提示真的很有帮助! 一个更好的地方是为 lat 和 lon 操作底层数组数据结构的自定义 getter 和 setter。

以上是关于RestKit mapKeyPath 到数组索引的主要内容,如果未能解决你的问题,请参考以下文章

Restkit:将数组映射到对象

RestKit:将嵌套数组映射到对象

RestKit - 将数组的键路径映射到该数组内的对象

RestKit 2.0 - 将 json 数组映射到实体关系会丢失数组序列

使用 RestKit 将 JSON“关联数组”映射到 CoreData

Restkit:从核心数据获取到服务器的 POST 对象数组