【发布时间】:2013-05-31 06:37:42
【问题描述】:
我正在使用 RestKit 0.20,在将包含动态键的层次结构的 JSON 映射到一个对象时遇到问题。
JSON 如下所示:
{
"id": 42,
"name": "Name of this entity",
"specialDataMap": {
"2091:10": {
"id": 2091,
"type": "10",
"value": "1'509.49",
"name": "Name of special data type 10"
},
"2091:02" {
"id": 2091,
"type": "02",
"value": "5.5543",
"name": "Name of special data type 02"
}
}
}
并且应该使用 RestKit 映射到这样的对象:
@interface InfoPoint : NSManagedObject
@property (nonatomic, retrain) NSString* identifier;
@property (nonatomic, retrain) NSString* name;
@property (nonatomic, retrain) NSString* valueOfType10;
@property (nonatomic, retrain) NSString* valueOfType02;
@end
如您所见,我不想创建关系并将特殊数据存储到单独的对象中。这没有任何意义。 我想像所有其他属性一样将嵌套属性分配到 InfoPoint 对象中。通常这适用于嵌套对象的关键路径,但此路径包含动态部分:“2091:10”是 id 和 id 可能更改的类型的组合(不是我的“原始”想法,但我有消费它)。
我在 RestKit 文档中阅读了有关 Handling Dynamic Nesting Attributes 的信息。但我没有发现这是否以及如何与嵌套属性一起使用。
----- 添加为对评论/问题的回复:----
我也试过Dynamic Object Mapping。但它不起作用,因为 RestKit 似乎对 @"self" 目的地有问题:
RKEntityMapping* type10Mapping = [RKEntityMapping mappingForEntityForName:@"InfoPoint" inManagedObjectStore:objectStore];
[type10Mapping addAttributeMappingsFromDictionary:@{
@"value": @"valueOfType10"}];
RKDynamicMapping* dynamicMapping = [[RKDynamicMapping alloc] init];
[mapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"specialDataMap" toKeyPath:@"self" withMapping:dynamicMapping]];
[dynamicMapping setObjectMappingForRepresentationBlock:^RKObjectMapping *(id representation) {
if ([[representation valueForKeyPath:@"type"] isEqualToString:@"10"]) {
return type10Mapping;
}
return nil;
}];
【问题讨论】:
-
您尝试过基于块的动态对象映射吗?如果您的键总是不同的,则需要动态创建映射。
-
是的,我尝试使用动态对象映射。我将我的代码添加到问题中。我想我在@"self" 上遇到了和以前一样的问题。
标签: ios core-data restkit-0.20