RestKit:忽略一些动态嵌套属性

时间:2014-03-20 09:24:39

标签: ios objective-c restkit

我收到这样的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尝试从每个键创建一个对象,并且我不能指望每个键对我的映射都是相关且有用的。我可以对此做些什么吗?

2 个答案:

答案 0 :(得分:1)

您有几个选择:

  1. 使用RKDynamicMapping作为响应描述符的根映射
  2. 使用多个响应描述符来准确指定要处理的关键路径
  3. 使用KVC验证来拒绝错误映射(不理想,因为错误并未真正捕获)
  4. 对于动态映射选项,动态映射设置了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属性中。