मैं उद्देश्य सी प्रोजेक्ट पर काम कर रहा हूं, जो जेएसओएन प्रतिक्रियाओं को पार्स करने के लिए रेस्टकिट फ्रेमवर्क का उपयोग करता है। अब मैं निम्नलिखित मामले के लिए वस्तु मानचित्रण सेटिंग्स के साथ कुछ मदद की जरूरत है: 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];
}
}