2013-02-17 19 views
5

मैं उद्देश्य सी प्रोजेक्ट पर काम कर रहा हूं, जो जेएसओएन प्रतिक्रियाओं को पार्स करने के लिए रेस्टकिट फ्रेमवर्क का उपयोग करता है। अब मैं निम्नलिखित मामले के लिए वस्तु मानचित्रण सेटिंग्स के साथ कुछ मदद की जरूरत है: 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 * डेटा; 2 "SomeAPIInfo" ऑब्जेक्ट्स से भरा हुआ है। नाम ठीक से भरा हुआ है, लेकिन अन्य मान (पथ, maxVersion, minVersion) खाली हैं।

मैं क्या गलत कर रहा हूं? क्या "डेटा" ऑब्जेक्ट को मैप करने का कोई और तरीका है? शायद सीधे NSDictionary में, इसलिए "Some.API.Auth" कुंजी होगी और "SomeAPIInfo" ऑब्जेक्ट होगा (बिना "नाम" संपत्ति के)।

मदद के लिए धन्यवाद!

संपादित करें:। मुझे लगता है कि मानचित्रण क्योंकि डॉट्स कुंजी में ("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 प्रतिक्रिया बनाकर संभावित बिंदु बिंदु को खत्म करने का प्रयास करता हूं लेकिन बिंदुओं के बिना और देखता हूं कि समस्या अभी भी है या नहीं।

संबंधित मुद्दे