2012-10-03 26 views
3

我有客戶端和服務器端的像這樣的響應對象:如何在RestKit中手動進行對象映射?

客戶端:

//BaseResponse.h 
@interface BaseResponse : NSObject{ 
    NSString *code; 
    NSString *message; 
    NSObject *responseObject; 
} 
+(RKObjectMapping *)objectMapping; 

//BaseResponse.m 
+(RKObjectMapping *)objectMapping{ 
    RKObjectMapping *baseResponseMapping = [RKObjectMapping mappingForClass:[BaseResponse class]]; 
    [baseResponseMapping mapKeyPath:@"code" toAttribute:@"code"]; 
    [baseResponseMapping mapKeyPath:@"message" toAttribute:@"message"]; 
    [baseResponseMapping mapKeyPath:@"responseObject" toAttribute:@"responseObject"]; 

    return baseResponseMapping; 
} 

服務器端:

public class BaseResponse { 
    private String code; 
    private String message; 
    private Object responseObject; 
... 
} 

當我從IOS調用RESTful Web服務,它返回一個BaseResponse對象。但BaseResponse中的responseObject可能因Web服務方法而異。所以我做了它在服務器端和客戶端的對象。

所以我的問題是這樣的:我怎樣才能在restkit手動對象映射- (void)request:(RKRequest *)request didLoadResponse:(RKResponse *)response方法或- (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects方法調用後。

在此先感謝。

回答

0

我的解決辦法是這樣的

... 
[objectManager postObject:nil path:path parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *result) { 
    BaseResponse *response = (BaseResponse *)[[result array] objectAtIndex:0]; 
    NSError *error = nil; 
    AppVersion *appVersion = [[AppVersion alloc]init]; 
    RKMappingOperation *operation = [[RKMappingOperation alloc] 
               initWithSourceObject:response.responseObject destinationObject:appVersion mapping:[AppVersion objectMapping] ]; 

    BOOL success = [operation performMapping:&error]; 
... 
0

RESTkit實際上有這很好的支持。基本上你需要在響應中有一些東西可以用來確定你想要執行什麼樣的映射。

要做到這一點,你定義你的映射,動態映射,並從那裏走。

我可以從維基複製的例子,但是這將是欺騙,所以我建議你看一看this part of the mapping explanation