我在我的iOS项目中使用RestKit,并且发现了非常重要的问题,无法找到它的解决方案。
我有一个json:
[{
"name": "restkit",
"downloads": 2
},
{
"name": "restkit",
"rating": 10.0
}]
和数据模型:Model.h
@interface Model : NSObject
@property (nonatomic, strong) NSString * name;
@property (nonatomic, strong) NSString * key;
@property (nonatomic, strong) NSString * value;
@end
这些JSON对象在一个数组中加载,其中一个属性是“动态”属性。 在RestKit中执行映射后,我希望能够有2条记录:
name: "restkit", key: "downloads", value: 2
name: "restkit", key: "rating", value: 10.0
问题:如何将JSON在开头映射到2个NSObjects,如上例所示?
这是我使用RestKit和触发请求初始化映射的方法:
// during app initialization I setup mappings:
RKObjectMapping *modelMapping = [RKObjectMapping mappingForClass:[Model class]];
[metricDataMapping mapKeyPath:@"name" toAttribute:@"name"];
...... -- something should go here to support that dynamic stuff
[[RKObjectManager sharedManager].mappingProvider addObjectMapping:metricDataMapping];
// in the view controller when loading data
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:url usingBlock:^(RKObjectLoader *loader){
loader.objectMapping = [[RKObjectManager sharedManager].mappingProvider objectMappingForClass: [MetricData class]];
loader.onDidLoadObjects = ^(NSArray * objects){
self.dataArray = objects;
};
}];
问题在于,“下载”和“评级”键是动态的,它可以是任何单词。我需要解析“即时”并在UI中显示。 Restkit确实支持这种行为,但仅适用于嵌套字典。
答案 0 :(得分:0)
您可以使用键值编码访问动态命名的属性。在用JSON制作NSDictionary之后,请执行以下操作:
[self setValue:[dictionary objectForKey:@"downloads"] forKey:@"downloads"];
等
答案 1 :(得分:0)
我确实对RestKit触发的模型使用了键值验证,将正确的度量值和值设置为我想要的通用键。