2

我目前正在使用 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。我该怎么做呢?

更新:我尝试使用 RKErrorMessage 执行此操作的原因是它自动映射到传递到 RestKit get/post/put/etc 方法中的失败块的 NSError ......这非常好。

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

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

    }];
4

2 回答 2

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 字典。

于 2014-05-27T15:26:53.977 回答
0

你为什么用RKErrorMessage???

RKErrorMessage 是一个简单的类,用于表示客户端应用程序与之通信的远程后端系统返回的错误消息。

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

@interface MyCustomErrorObject : NSObject

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

@end
于 2013-02-28T16:24:12.010 回答