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 2.0 - 将 json 数组映射到实体关系会丢失数组序列