Restkit 0.2嵌套对象映射

时间:2014-08-06 09:40:18

标签: objective-c nsarray nsdictionary restkit-0.20

我有以下JSON,我似乎无法映射restkit 0.2

{
 "data":

    {"usersA":[
            {"name":"lal1","rank":"rank1"},
            {"name":"lal2","rank":"rank2"},
        ],

    {"usersB":[
            {"name":"lal1","rank":"rank1"},
            {"name":"lal2","rank":"rank2"},
            {"name":"lal3","rank":"rank3"},
        ],

    {"usersC":[
            {"name":"lal1","rank":"rank1"},
            {"name":"lal2","rank":"rank2"},
            {"name":"lal3","rank":"rank3"},
            {"name":"lal4","rank":"rank4"},
        ],  
    }
}

我创建了以下用户类:

@interface User : NSObject

@property (nonatomic, strong) NSString * name;
@property (nonatomic, strong) NSString * rank;

@end

像这样映射:

RKObjectMapping *userArrayMapping = [RKObjectMapping mappingForClass:[User class]];
[videoMapping addAttributeMappingsFromDictionary:@{@"name": @"name",@"rank": @"rank"}];

并调用data.users keyPath:

[RKResponseDescriptor responseDescriptorWithMapping:userArrayMapping
                                             method:RKRequestMethodGET
                                        pathPattern:HOME_SCREEN_API_URI
                                            keyPath:@"data.usersA"
                                        statusCodes:[NSIndexSet indexSetWithIndex:200]];

这很好,我得到了#34;用户A"使用以下代码映射到User类数组:

__block NSMutableArray* dataArr = [[NSMutableArray alloc]init];
[[RKObjectManager sharedManager] getObjectsAtPath:USERS_API
                                           parameters:nil
                                           success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
                                                  dataArr = mappingResult.array;
                                              }
                                              failure:^(RKObjectRequestOperation *operation, NSError *error) {
                                                  NSLog(@"error: %@", error);
                                              }];

但我似乎无法映射"数据"将对象转换为包含" usersA"," usersB"和"用户C"。

我正在使用restkit 0.2。我能找到的唯一例子是以前的版本......

任何帮助将不胜感激!

TX。

1 个答案:

答案 0 :(得分:0)

由于您在响应JSON中只有3个不同的密钥路径,因此只需创建3个响应描述符并将它们全部添加到对象管理器中。每个响应描述符之间的唯一区别是关键路径:

  1. @" data.usersA"
  2. @" data.usersB"
  3. @" data.usersC"
  4. 如果你有一个未知数字或任意一组关键路径,这个解决方案并不理想,但它对你有用而且很简单。

    执行此操作时,所有映射的项目都将在mappingResult.array中返回,但如果您需要,可以使用mappingResult.dictionary查找每个对象的原始密钥路径。

相关问题