我收到这样的JSON对象:
{
"rent": {
"id": "someId"
},
"upcoming": {
"id": "someId"
},
"watchnow": {
"id": "someId"
}
}
然后我在映射上将forceCollectionMapping
设置为YES
,以便为每个键获取一个对象,即一个对象用于"租用"一个用于"即将到来&#34 ;和#34; watchnow"。具体来说,这是通过以下代码完成的:
[searchResultsMapping addAttributeMappingFromKeyOfRepresentationToAttribute:@"searchSection"];
所以这成功地给了我三个对象,然后我可以做一些关系映射来获取id键以及对象上的其他内容。
现在,我的问题是如果发生错误,我会得到这个JSON代码:
{
"error": {
"errorcode": "someId"
}
}
所以(searchSection)
变成"错误"我的关系映射寻找" id"但它没有,所以映射失败。问题是设置addAttributeMappingFromKeyOfRepresentationToAttribute
会使RestKit尝试从每个键创建一个对象,并且我不能指望每个键对我的映射都是相关且有用的。我可以对此做些什么吗?
答案 0 :(得分:1)
您有几个选择:
RKDynamicMapping
作为响应描述符的根映射对于动态映射选项,动态映射设置了forceCollectionMapping
选项,它检查可用的顶级键并返回适当的映射(不会设置forceCollectionMapping
,哪个使用addAttributeMappingFromKeyOfRepresentationToAttribute:
)。
答案 1 :(得分:0)
我使用Wain的第一个建议让它工作。如果有人遇到同样的问题,这就是解决方案:
我创建了一个像这样的动态映射:
RKDynamicMapping *dynamicMapping = [RKDynamicMapping new];
dynamicMapping.forceCollectionMapping = YES;
[dynamicMapping setObjectMappingForRepresentationBlock:^RKObjectMapping * (id representation) {
if ([representation valueForKey:@"watchnow"] || [representation valueForKey:@"upcoming"] || [representation valueForKey:@"rent"]) {
return searchResultsMapping;
}
return nil;
}];
正如您在顶部的示例中所看到的,我只对名为" watchnow","即将发布的"或者"租用"。
返回的searchResultsMapping
配置如下:
RKObjectMapping *searchResultsMapping = [RKObjectMapping mappingForClass:[TDXSearchResults class]];
[searchResultsMapping addAttributeMappingFromKeyOfRepresentationToAttribute:@"searchSection"];
所以我现在最终得到三个SearchResult对象,其中包括" watchnow","即将推出"或"租"在他们的searchSection
NSString属性中。