2013-05-29 230 views
1

我對RestKit框架相當陌生。我在解析一些JSON響應時遇到困難。RestKit的對象映射

{ 
    "success": "1", 
    "loginStatus": "Success", 
    "sessionToken": "NTE5YTg5NjE4ZDIxYzQ3YzMUybdtsUU8989GVmaW5lZHwxMzY5ODE0MTc4Mzgw", 
    "user": { 
     "ActivationMethod": false, 
     "ActivationToken": "iey4C5E3iMt7mXZL", 
     "Active": true, 
     "FirstName": "John", 
     "LastName": "Doe", 
} 
} 

這是我的登錄Web服務的響應。

我想要的是將sessionToken,FirstName和LastName的值映射到一個類中。爲此,我創建了一個類用戶

@interface User : NSObject 

@property (nonatomic, strong) NSString* firstName; 
@property (nonatomic, strong) NSString* lastName; 
@property (nonatomic, strong) NSString* sessionToken; 

@end 

因爲我曾嘗試下面的代碼映射:

RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[User class]]; 
    [mapping addAttributeMappingsFromDictionary:@{ 
    @"FirstName": @"firstName", 
    @"LastName": @"lastName", 
    @"sessionToken" : @"sessionToken", 
    }]; 

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping pathPattern:@"/login" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

    [objectManager addResponseDescriptor:responseDescriptor]; 

使用此我得到的姓氏和名字爲空值。

的網址是http:// [BASE URL] /登錄

我曾經使用過此link的對象映射走了,但可以解決這個問題。

在這方面的任何指針將是非常有益的

問候,

tek3

** * ** * ** * ** * ** 編輯 ** * ** * ** * ** * ****

我現在能夠得到使用下面的代碼的值。

RKObjectMapping* userMapping = [RKObjectMapping mappingForClass:[User class] ]; 
    [userMapping addAttributeMappingsFromDictionary:@{ 
    @"FirstName": @"firstName", 
    @"LastName": @"lastName", 
    }]; 


    RKObjectMapping* loginMapping = [RKObjectMapping mappingForClass:[Login class] ]; 
    [loginMapping addAttributeMappingsFromDictionary:@{ 
    @"sessionToken": @"sessionToken", 
    }]; 

    [loginMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"user" 
                       toKeyPath:@"user" 
                       withMapping:userMapping]]; 


    RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:loginMapping pathPattern:@"/login" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

但我仍然有一個困惑。我必須創建另一個登錄爲

@interface Login : NSObject 

@property (nonatomic, strong) NSString* sessionToken; 
@property (nonatomic, strong) User* user; 

@end 

登錄具有用戶類的屬性作爲屬性。有什麼方法可以通過簡單地創建單個對象而不是多個嵌套對象來獲取JSON響應中所有鍵的值?

回答

5

使用原來的映射與一個類你可以這樣做:

RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[User class]]; 
[mapping addAttributeMappingsFromDictionary:@{ 
@"user.FirstName": @"firstName", 
@"user.LastName": @"lastName", 
@"sessionToken" : @"sessionToken", 
}]; 
+0

非常感謝...... – tek3

+0

謝謝!幫助了我很多! –