RestKit映射与NSDictionary和NSArray对象

{"coord":{"lon":72.62,"lat":23.03},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10n"}],"base":"stations","main":{"temp":303.082,"pressure":1014.85,"humidity":66,"temp_min":303.082,"temp_max":303.082,"sea_level":1018.46,"grnd_level":1014.85},"wind":{"speed":1.07,"deg":340.501},"rain":{"3h":0.435},"clouds":{"all":76},"dt":1475333911,"sys":{"message":0.0033,"country":"IN","sunrise":1475283682,"sunset":1475326567},"id":1279233,"name":"Ahmadabad","cod":200} 

以上是我的API响应。

现在我想映射“天气”和“名称”,并希望同一个对象作为响应。

我可以创build上课

 @interface WeatherStatus : NSObject @property (nonatomic, copy) NSString *name; @property (nonatomic, strong) WeatherInfo *info; @end 

 @interface WeatherInfo : NSObject @property (nonatomic, copy) NSString *description; @property (nonatomic, copy) NSString *icon; 

下面是映射代码。

  RKObjectMapping *weatherInfo = [RKObjectMapping mappingForClass:[WeatherInfo class]]; [weatherInfo addAttributeMappingsFromDictionary:@{@"description": @"description", @"icon": @"icon"}]; RKObjectMapping *weatherStatus = [RKObjectMapping mappingForClass:[WeatherStatus class]]; [weatherStatus addAttributeMappingsFromArray:@[@"name"]]; [weatherStatus addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"weather" toKeyPath:@"weather" withMapping:weatherInfo]]; RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:weatherStatus method:RKRequestMethodGET pathPattern:nil keyPath:@"weather" statusCodes:nil]; [objectManager addResponseDescriptor:responseDescriptor]; NSDictionary *queryParams; queryParams = [NSDictionary dictionaryWithObjectsAndKeys:kAPP_KEY, @"appid", @"Ahmedabad", @"q", nil]; [[RKObjectManager sharedManager] getObjectsAtPath:@"/data/2.5/weather" parameters:queryParams success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { WeatherStatus *obj = [mappingResult.array objectAtIndex:0]; NSLog(@"info %@",obj.info); NSLog(@"name %@",obj.name); } failure:^(RKObjectRequestOperation *operation, NSError *error) { NSLog(@"What do you mean by 'there is no coffee?': %@", error); }]; 

我正进入(状态

 info (null) name (null) 

谁能让我知道错误在哪里?

我已经看到RestKit复杂和简单的JSON RKObjectMapping几乎工作,但

不要使用description作为属性名称,它只会导致你的问题。 使用overview或类似的东西。

在JSON中,天气是一个数组,所以你应该使你的weather(info)属性成为一个NSArray ,并确保映射中的名字和属性匹配。

我将“WeatherStatus”类中的info对象的属性更改为NSArray。

 @property (nonatomic, copy) NSString *name; @property (nonatomic, strong) NSArray *weather; 

这里是映射代码的修改。

 RKObjectMapping *venueMapping = [RKObjectMapping mappingForClass:[WeatherStatus class]]; [venueMapping addAttributeMappingsFromDictionary:@{@"name": @"name"}]; RKObjectMapping *locationMapping = [RKObjectMapping mappingForClass:[WeatherInfo class]]; [locationMapping addAttributeMappingsFromDictionary:@{@"description": @"description",@"icon":@"icon"}]; [venueMapping addRelationshipMappingWithSourceKeyPath:@"weather" mapping:locationMapping]; RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:venueMapping method:RKRequestMethodGET pathPattern:nil keyPath:nil statusCodes:nil]; [objectManager addResponseDescriptor:responseDescriptor]; 

添加与WeatherStatus类的关系映射。

信贷转到https://stackoverflow.com/users/1988185/wain