【问题标题】:RestKit mapping multiple type arrayRestKit 映射多类型数组
【发布时间】:2013-05-26 03:22:40
【问题描述】:

我有以下 JSON:

{
    "stream": [{
        "catalog": {}
    }, {
        "catalog": {}
    }, {
        "user": {}
    }]
}

具有以下映射规则:

[RKResponseDescriptor responseDescriptorWithMapping:catalogMapping
                                        pathPattern:nil keyPath:@"stream.catalog"
                                        statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]];

[RKResponseDescriptor responseDescriptorWithMapping:userMapping
                                        pathPattern:nil keyPath:@"stream.user"
                                        statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]];

映射工作正常,直到流中有多种类型的对象。当流包含多个对象时,比如说用户和目录 restkit 失败了这个断言:

NSCAssert([representation isKindOfClass:[NSDictionary class]], @"Expected a dictionary representation");

有没有办法映射这种结构?

【问题讨论】:

  • 所以有时“流”是 JSON 中的字典,有时是数组?
  • 它总是一个字典数组。
  • 在这种情况下,流是一个数组,而不是字典?意思是stream 是一个数组?

标签: restkit restkit-0.20


【解决方案1】:

我有幸请求更改 API,所以我们搬到了

{
    "stream": [{
        "type": "catalog",
        "other": "fields"
    }, {
        "type": "catalog"
        "other": "fields"
    }, {
        "type": "user"
        "other": "fields"
    }]
}

现在我使用动态映射:

    RKDynamicMapping* dynamicMapping = [RKDynamicMapping new];
    [dynamicMapping setObjectMappingForRepresentationBlock:^RKObjectMapping *(id representation) {
        if ([[representation objectForKey:@"type"] isEqualToString:@"catalog"]) {
            return catalogMapping;
        } else if ([[representation objectForKey:@"type"] isEqualToString:@"user"]) {
            return userMapping;
        }
//       ...
    }];


    [manager addResponseDescriptor:[RKResponseDescriptor responseDescriptorWithMapping:dynamicMapping
                                                                           pathPattern:nil keyPath:@"stream"
                                                                           statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]];

【讨论】:

    猜你喜欢
    • 2017-03-11
    • 2014-01-20
    • 2017-12-15
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 2013-06-15
    相关资源
    最近更新 更多