【问题标题】:How to manually make object mapping in RestKit?如何在 RestKit 中手动进行对象映射?
【发布时间】:2012-10-03 11:54:33
【问题描述】:

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

客户端:

//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 中手动进行对象映射。

提前致谢。

【问题讨论】:

    标签: restkit


    【解决方案1】:

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

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

    我可以从 wiki 复制示例,但那是作弊,所以我建议你看看 this part of the mapping explanation

    【讨论】:

      【解决方案2】:

      我的解决办法是这样的

      ...
      [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];
      ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-24
        • 1970-01-01
        • 1970-01-01
        • 2013-08-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-12
        相关资源
        最近更新 更多