2013-02-28 69 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