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