2013-02-28 64 views
2

我目前使用的RKErrorMessage类映射来自我的服务器,像这样的错误消息:RestKit 0.20.0-rc1 - 如何映射多个错误参数?

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这样做的原因是,它会自动映射到NSError传递到在RestKit失败块GET/POST/PUT /等方法......这是相当不错的。

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

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

    }]; 
+1

我知道这不是你要求的......但以我的经验,你应该尽量远离RestKit。 – Goles 2014-05-27 15:25:01

+1

这也成为我的经验。不幸的是,我不知道进去的时候,所以我与RestKit一起被卡住了。 – docksteaderluke 2014-05-28 15:23:34

回答

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"]]; 

然后,从不良区回调,您可以访问用户信息的字典,如:

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

RestKit会自动将JSON的“error”字典的所有属性映射到RKErrorMessage的userInfo字典。

+1

啊,我看你做了什么没有。好想法。下次有机会我会试试这个(尽管可能不会很快)。 – docksteaderluke 2014-05-28 15:27:27

+0

雅我必须做你想做的完全相同的事情,我用它来完成它。祝你好运。 – 2014-05-28 17:49:58

+0

使用'RKErrorMessage'类时,使用'toKeyPath:@“userInfo”'添加属性映射不起作用。我不得不使用目标关键路径作为“errorMessage”。 – Shiprack 2015-05-07 10:54:25

0

为什么使用RKErrorMessage ???

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

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

@interface MyCustomErrorObject : NSObject 

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

@end 
+0

这总是计划B.我试图避免这种情况,因为RKErrorMessage到NSError映射很方便。查看更新。 – docksteaderluke 2013-02-28 16:42:05

+0

不完全是我正在寻找...但它是正确的。 – docksteaderluke 2013-02-28 20:05:20

+0

@docksteaderluke您可以详细说明此解决方案的实际情况。你能继续使用getObjectsAtPath吗?我遇到了同样的事情。我去了一个MyCustomErrorObject类型的路径,但我仍然没有看到如何在失败块中获取该对象一次。 – 2013-04-16 22:54:13