2013-02-17 20 views
5

JSON yanıtlarını ayrıştırmak için RestKit framework kullanan Objective C projesi üzerinde çalışıyorum. Şimdi şu durum için nesne haritalama ayarlarıyla biraz yardıma ihtiyacım: JSON yanıtı:RestKit 0.20 - Dinamik iç içe nesne eşlemesi

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

ve aşağıdaki nesneler:

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 

Ve işte benim haritalama ayarları ise Sorun şu ki "veri" nesnesi düzgün şekilde eşlenmemiş: NSArray * verileri; , 2 "SomeAPIInfo" nesneleriyle doldurulur. ad düzgün bir şekilde doldurulur, ancak diğer değerler (yol, maksimum değer, minimum değer) boştur.

Neyi yanlış yapıyorum? "Veri" nesnesini eşlemek için başka bir yol var mı? Belki doğrudan NSDictionary içine, bu yüzden "Some.API.Auth" anahtar olacaktır ve "SomeAPIInfo" nesne ("name" özelliği olmadan) olacaktır.

Yardımlarınız için teşekkürler!

Düzenleme:. ben haritalama çünkü noktalar anahtarında ("SOME.API.Auth) ait çalışmıyor düşünüyorum

RKMappingOperation.m: 
- (NSArray *)simpleAttributeMappings 
{ 
    NSMutableArray *mappings = [NSMutableArray array]; 
    for (RKAttributeMapping *mapping in self.nestedAttributeMappings) { 
     if ([mapping.sourceKeyPath rangeOfString:@"."].location == NSNotFound) { 
      [mappings addObject:mapping]; 
     } 
    } 

cevap

0

Ben bir hata neden oldu benzer sorunlar koştu RestKit https://github.com/RestKit/RestKit/issues/1532.Aynı yapıya sahip ancak nokta olmadan sahte bir JSON yanıtı oluşturarak olası nokta sorununu ortadan kaldırmayı denedim ve sorunun hala devam edip etmediğine bakın.

İlgili konular