2014-11-03 129 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