2014-11-03 127 views
0

我想通过以下JSON映射一个对象嵌套对象:映射与RESTKIT

{ 
    "main_email": {"id": 1, "address": "[email protected]"}, 
    "id": 1, 
    "first_name": "first name", 
    "last_name": "last name", 
} 

我有一个叫做用户与性能对象:

@property (nonatomic, assign) NSInteger userID; 
@property (nonatomic, copy) NSString *firstName; 
@property (nonatomic, copy) NSString *lastName; 
@property (nonatomic, strong) Email *mainEmail; 

和对象的电子邮件有属性:

@property (nonatomic, assign) NSInteger emailID; 
@property (nonatomic, copy) NSString *emailAddress; 

现在我在像波纹管的用户映射:

RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[User class]]; 
[userMapping addAttributeMappingsFromDictionary:@{@"id": @"userID", 
              @"first_name": @"firstName", 
              @"last_name": @"lastName"}]; 
RKObjectMapping *emailMapping = [RKObjectMapping mappingForClass:[Email class]]; 
[emailMapping addAttributeMappingsFromDictionary:@{@"main_email.id": @"emailID", 
               @"main_email.address": @"emailAddress"}]; 
[userMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"mainEmail" 
                      toKeyPath:@"mainEmail" 
                      withMapping:emailMapping]]; 

此代码保持在User.mainEmail

回答

0

首先你的属性映射返回一个空的电子邮件对象应该是fromKeyPath:@"main_email" toKeyPath:@"mainEmail"fromKeyPath是在JSON的关键路径和toKeyPath是CoreData属性/关系。

其次,在您的电子邮件映射中,您不必为每个键路径添加“main_email”前缀。当RestKit没有嵌套映射它会处理这件事情(假设你的属性映射设置正确)

下面是这些变化的例子:

RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[User class]; 
[userMapping addAttributeMappingsFromDictionary:@{@"id": @"userID", 
              @"first_name": @"firstName", 
              @"last_name": @"lastName"}]; 
RKObjectMapping *emailMapping = [RKObjectMapping mappingForClass:[Email class]]; 
[emailMapping addAttributeMappingsFromDictionary:@{@"id": @"emailID", 
               @"address": @"emailAddress"}]; 
[userMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"main_email" 
                      toKeyPath:@"mainEmail" 
                      withMapping:emailMapping]]; 
+0

我想你的答案,但它仍然无法正常工作,我不知道为什么......我改变了我的web服务以返回另一种类型的JSON,所以我“解决了”这个问题,无论如何,感谢您的帮助。 – 2014-11-03 21:55:33