如何使用此JSON实现动态映射(RKDynamicMapping)?

时间:2013-04-25 16:39:58

标签: mapping restkit restkit-0.20

我的后端返回这种JSON文件:

{     “回应”:{         “消息”:“测试”     },     “responseCode”:205 }

根据responseCode值,内部响应的内容是不同的。 我知道我必须使用类似RKDynamicMapping的东西,但不知道如何。 我看到的问题是,在示例代码和手册中,用于区分映射的属性在内部,但在这种情况下是在外部。 我试过这个但是不起作用:

    [dynamicMapping setObjectMappingForRepresentationBlock:^RKObjectMapping *(id representation) {
        NSNumber* responseCode=(NSNumber*)representation[@"responseCode"];
        if (responseCode.integerValue==204) {
            return searchByLocatorResponseContent204Mapping;
        } else if (responseCode.integerValue==205) {
            return searchByLocatorResponseContent205Mapping;
        }
        return nil;
    }];
    RKResponseDescriptor *searchByLocatorResponseContentResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:dynamicMapping pathPattern:kCheckinSearchByLocatorPath keyPath:nil  statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
    [objectManager addResponseDescriptor:searchByLocatorResponseContentResponseDescriptor];

我想是因为我想要更改的映射不包含用于区分它们的属性(例如来自rest kit网站的女孩/男孩样本代码中的类型)

有人有任何建议吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果你这样设置,restkit期望dynamicMapping将提供整个响应json的映射,而不仅仅是'response'的内容。

基本上searchByLocatorResponseContent204Mapping需要有response字段和responseCode字段的映射。

据我所知,restkit无法向外看,因为representation参数只为您提供当前上下文内的信息。但是,它位于路线图上,并且已经有一张关于此的票:https://github.com/RestKit/RestKit/issues/1327