3

我在客户端和服务器端都有一个响应对象,如下所示:

客户端 :

//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 服务方法而有所不同。所以我在服务器端和客户端做了对象。

所以我的问题是:如何在调用- (void)request:(RKRequest *)request didLoadResponse:(RKResponse *)response方法或- (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects方法后在 restkit 中手动进行对象映射。

提前致谢。

4

2 回答 2

0

RESTkit 实际上对此有很好的支持。基本上,您需要在响应中包含一些可以用来确定您想要执行的映射类型的内容。

为此,您将映射定义为动态映射,然后从那里开始。

我可以从 wiki 复制示例,但那是作弊,所以我建议您看一下映射说明的这一部分

于 2013-10-25T09:13:01.717 回答
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];
...
于 2014-02-14T15:48:06.670 回答