RestKit:映射复杂嵌套的问题,需要forceCollectionMapping的多个级别
我试图用RestKit来映射一些JSON数据,到目前为止还是无法做到这一点。 这些数据是一组等级date和注册。 它看起来像下面(不可能改变它):
{ "days": { "2012-10-29": { "2106303": { "activityCode": "LU", "approved": false, "hours": 0.5, "description": "some description", }, "2106304": { "activityCode": "VF", "approved": false, "hours": 7.5, "description": "some other description", } }, "2012-10-30": null, } }
我的代码如下所示:
- (void)setupWeekMappingForManager:(RKObjectManager *)manager { RKObjectMapping *registrationMapping = [RKObjectMapping mappingForClass:[Registration class]]; registrationMapping.forceCollectionMapping = YES; [registrationMapping mapKeyOfNestedDictionaryToAttribute:@"registrationNumber"]; RKObjectMapping *dayMapping = [RKObjectMapping mappingForClass:[Day class]]; dayMapping.forceCollectionMapping = YES; [dayMapping mapKeyOfNestedDictionaryToAttribute:@"date"]; // how can this relationship be mapped? [dayMapping mapKeyPath:@"(date)." toRelationship:@"registrations" withMapping:registrationMapping]; [manager.mappingProvider setMapping:dayMapping forKeyPath:@"days"]; }
它愉快地回报了日子,但我无法find一个好的方法来映射这两种types之间的关系,
任何推动正确的方向将不胜感激,
最好的问候,汤米
终于自己find了,下面是对我有用的东西:
- (void)setupWeekMappingForManager:(RKObjectManager *)manager { RKObjectMapping *registrationMapping = [RKObjectMapping mappingForClass:[Registration class]]; registrationMapping.forceCollectionMapping = YES; [registrationMapping mapKeyOfNestedDictionaryToAttribute:@"registrationNumber"]; [registrationMapping mapKeyPath:@"(registrationNumber).description" toAttribute:@"description"]; RKObjectMapping *dayMapping = [RKObjectMapping mappingForClass:[Day class]]; dayMapping.forceCollectionMapping = YES; [dayMapping mapKeyOfNestedDictionaryToAttribute:@"date"]; [dayMapping mapKeyPath:@"(date)" toRelationship:@"registrations" withMapping:registrationMapping]; [manager.mappingProvider setMapping:dayMapping forKeyPath:@"days"];
}
这给了我一个小时注册作为一个NSArray的一天对象。 参考它看起来像这样:
@interface Day : NSObject @property (nonatomic, readonly, copy) NSDate *date; @property (nonatomic, readonly, strong) NSMutableArray *registrations; @end
如果这对你有帮助,请把这个答案投给:)