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

Ios RestKit 0.20.0-rc1-如何映射多个错误参数?,ios,objective-c,cocoa-touch,cocoa,restkit,Ios,Objective C,Cocoa Touch,Cocoa,Restkit,我当前正在使用RKErrorMessage类映射来自我的服务器的错误消息,如下所示: RKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[RKErrorMessage class]]; [errorMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:@"message" toKeyPath:@"errorMessage"

我当前正在使用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",
    }
}
我的想法是,如果我的应用程序在访问服务器时出现问题,我可以直接将其中一些错误消息映射到UIAlertView。这已经可以通过只显示错误消息来完成,但是添加一个标题似乎可以很好地适应UIAlertView

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

更新:我尝试使用RkerErrorMessage执行此操作的原因是,它会自动映射到RestKit get/post/put/etc方法中传递到故障块中的NSError。。。这很好

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

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

    }];

为什么要使用
RkerMessage

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

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

@interface MyCustomErrorObject : NSObject

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

@end

这里有一种方法可以实现您最初提出的问题(不确定为什么您接受了实际上没有回答您问题的答案):

与示例代码的关键区别在于这一行:

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

这始终是计划B。我试图避免这种情况,因为RKErrorMessage到NSError的映射很方便。请参阅更新。@docksteaderluke您能否详细说明此解决方案实际上是什么。您是否能够继续使用getObjectsAtPath?我遇到了同样的事情。我走了一条MyCustomErrorObject风格的路径,但我仍然不知道如何在失败块中找到该对象。1。像这样映射错误:RKObjectMapping*errorMapping=[RKObjectMappingForClass:[MyCustomErrorObject类]];2.添加响应描述符。3.在失败块中,在此处获取错误对象:[error.userInfo objectForKey:rkobjectmapperrobjectskey]我知道这不是您想要的。。。但根据我的经验,你应该尽量远离RestKit。这也成为了我的经验。不幸的是,我不知道这是怎么回事,所以我暂时被RestKit卡住了。啊,我知道你在那里做了什么。好主意。我会在下次有机会的时候尝试一下(虽然可能不会很快)。是的,我必须做与你打算做的完全相同的事情,我用这个完成了它。祝你好运。使用
RkerMessage
类时,使用
toKeyPath:@“userInfo”
添加属性映射不起作用。我必须使用目标键路径作为“errorMessage”。
NSString *message = [[[[[error userInfo] objectForKey:RKObjectMapperErrorObjectsKey] objectAtIndex:0] userInfo] objectForKey:@"message"];
NSString *title = [[[[[error userInfo] objectForKey:RKObjectMapperErrorObjectsKey] objectAtIndex:0] userInfo] objectForKey:@"title"];