2013-02-17 9 views
5

私はObjective Cプロジェクトで、JSONレスポンスの解析にRestKitフレームワークを使用しています。 今、私は次のような場合のためのオブジェクトマッピングの設定でいくつかの助けが必要: JSONレスポンス:RestKit 0.20 - ダイナミックネストされたオブジェクトマッピング

{ 
    "data": { 
     "SOME.API.Auth": { 
      "maxVersion": 2, 
      "minVersion": 1, 
      "path": "auth.cgi" 
     }, 
     "SOME.Station": { 
      "maxVersion": 1, 
      "minVersion": 1, 
      "path": "Station/task.cgi" 
     } 
    }, 
    "success": true 
} 

と、次のオブジェクト:

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]; 

@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 

そして、ここが私のマッピング設定です問題は、 "データ"オブジェクトが正しくマップされていないことです。 NSArray * data; は2つの「SomeAPIInfo」オブジェクトで満たされています。名前は正しく埋められていますが、他の値(path、maxVersion、minVersion)は空です。

私は間違っていますか? "データ"オブジェクトをマップする別の方法はありますか?たぶん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]; 
     } 
    } 

答えて

0

私はバグによって引き起こされた同様の問題に遭遇しました。 RestKit https://github.com/RestKit/RestKit/issues/1532。私は同じ構造でドットを使わずに偽のJSONレスポンスを作成し、問題がまだ存在するかどうかを調べることで可能なドットの問題を排除しようとします。

関連する問題