我目前正在使用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) {
}];
答案 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