RestKit 0.20 - 动态嵌套对象映射

5
我正在开发一个使用 RestKit 框架解析 JSON 响应的 Objective C 项目。现在我需要一些关于以下情况的对象映射设置的帮助: JSON 响应:
    {
   "data": {
       "SOME.API.Auth": {
           "maxVersion": 2,
           "minVersion": 1,
           "path": "auth.cgi"
       },
       "SOME.Station": {
           "maxVersion": 1,
           "minVersion": 1,
           "path": "Station/task.cgi"
       }
   },
   "success": true
}

"和下列物品:"
@interface Response : NSObject
@property (strong, nonatomic) NSArray *data;
@property (assign, nonatomic) BOOL success;
@end


@interface SomeAPIInfo : NSObject
@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSString *path;
@property (strong, nonatomic) NSString *minVersion;
@property (strong, nonatomic) NSString *maxVersion;
@end

这是我的映射设置:
RKObjectMapping *responseMapping = [RKObjectMapping mappingForClass:[Response class]];
[responseMapping addAttributeMappingsFromDictionary:@{@"success": @"success"}];

RKObjectMapping *dataObjectMapping =  [RKObjectMapping mappingForClass:[SomeAPIInfo class]];
dataObjectMapping.forceCollectionMapping = YES;
[dataObjectMapping addAttributeMappingFromKeyOfRepresentationToAttribute:@"name"];
[dataObjectMapping addAttributeMappingsFromDictionary:@{
@"(name).path": @"path",
@"(name).minVersion": @"minVersion",
@"(name).maxVersion": @"maxVersion"}];


[responseMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"data"
                                                                               toKeyPath:@"data"
                                                                             withMapping:dataObjectMapping]];

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:responseMapping
                                                                                  pathPattern:nil
                                                                                      keyPath:nil
                                                                                  statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];


[_objectManager addResponseDescriptor:responseDescriptor];

问题在于"data"对象没有正确映射: NSArray *data; 填充了2个"SomeAPIInfo"对象。名称已经正确填写,但其他值(路径、最大版本、最小版本)为空。
我做错了什么? 是否有另一种方式来映射"data"对象?也许直接映射为NSDictionary,这样"Some.API.Auth"将是键,"SomeAPIInfo"将是对象(不包括"name"属性)。
感谢您的帮助!
编辑:我认为映射不起作用是因为键中有点号("SOME.API.Auth")。
RKMappingOperation.m:
- (NSArray *)simpleAttributeMappings
{
    NSMutableArray *mappings = [NSMutableArray array];
    for (RKAttributeMapping *mapping in self.nestedAttributeMappings) {
        if ([mapping.sourceKeyPath rangeOfString:@"."].location == NSNotFound) {
            [mappings addObject:mapping];
        }
    }
1个回答

0

我遇到了类似的问题,这是由于RestKit中的一个错误引起的https://github.com/RestKit/RestKit/issues/1532。我会尝试通过创建一个具有相同结构但没有点的虚假JSON响应来消除可能的点问题,并查看问题是否仍然存在。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接