RestKit 0.20.0-rc1 - 如何映射多个错误参数?

时间:2013-02-28 16:04:34

标签: ios objective-c cocoa-touch cocoa restkit

我目前正在使用RKErrorMessage类来映射来自我的服务器的错误消息,如下所示:

RKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[RKErrorMessage class]];
[errorMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:@"message" toKeyPath:@"errorMessage"]];
RKResponseDescriptor *errorResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:errorMapping
                                                                                            pathPattern:nil
                                                                                                keyPath:@"error"
                                                                                            statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassClientError)];

但是现在我想从我的服务器映射一个额外的参数,例如错误标题(或其他任何事情)。我的JSON看起来像这样:

{
    "error":{
        "title":"This is the error title"
        "message":"This is the error message",
    }
}

我的想法是,如果我的应用程序访问服务器时出现问题,我可以直接将其中一些错误消息映射到UIAlertViews。这可以通过错误消息完成,但添加标题似乎使其适合UIAlertView。

通过查看RKErrorMessage类,我发现它只有两个参数:errorMessage和userInfo。我该怎么做呢?

UPDATE:我尝试使用RKErrorMessage执行此操作的原因是它会自动映射到RestKit get / post / put / etc方法中传递给失败块的NSError ...这很不错。

[objectManager getObjectsAtPath:@"/api/somethingsomething/" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {

    } failure:^(RKObjectRequestOperation *operation, NSError *error) {

    }];

2 个答案:

答案 0 :(得分:3)

这是一种做你原来问的方法(不知道为什么你接受了没有实际回答你问题的答案):

RKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[RKErrorMessage class]];
[errorMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"userInfo"]];
RKResponseDescriptor *errorResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:errorMapping
                                                                                            pathPattern:nil
                                                                                                keyPath:@"error"
                                                                                            statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassClientError)];

与示例代码的主要区别在于以下几行:

[errorMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"userInfo"]];

然后,从失败块回调中,您可以访问userInfo字典,如:

NSString *message = [[[[[error userInfo] objectForKey:RKObjectMapperErrorObjectsKey] objectAtIndex:0] userInfo] objectForKey:@"message"];
NSString *title = [[[[[error userInfo] objectForKey:RKObjectMapperErrorObjectsKey] objectAtIndex:0] userInfo] objectForKey:@"title"];

RestKit将自动映射JSON的所有属性"错误"字典到RKErrorMessage的userInfo字典。

答案 1 :(得分:0)

为什么使用RKErrorMessage ???

  

RKErrorMessage是一个用于表示错误的简单类   客户端使用的远程后端系统返回的消息   应用正在沟通。

我认为最好的方法是创建自定义对象来映射您的参数。

@interface MyCustomErrorObject : NSObject

    @property (nonatomic, strong) NSString *title;
    @property (nonatomic, strong) NSString *message;

@end