2014-09-03 58 views
0

我正在嘗試來自服務器xml的映射錯誤響應。在restkit 0.21版本中,它工作正常。在上一個版本中沒有(0.22以上)。服務器可能的響應是<authorization-fail/>。許多服務器功能可能導致這種響應。在RestKit中用於xml的對象映射器

+ (void)addAuthErrorMapping:(RKObjectManager*)objectManager 
{ 
    RKObjectMapping* errorMapping = [RKObjectMapping mappingForClass:[RKErrorMessage class]]; 
    [errorMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil 
                      toKeyPath:@"errorMessage"]]; 

    RKResponseDescriptor* errorResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:errorMapping 
              method:RKRequestMethodGET 
             pathPattern:nil 
              keyPath:@"authorization-fail" 
             statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

    [objectManager addResponseDescriptor:errorResponseDescriptor]; 
} 

在0.21版本中,我使用authorisation-fail鍵獲得字典。在最後的版本中,結果是空的字典。

+0

具體說明工作和不工作的版本。它做什麼呢?你可能想在github上引發一個bug(帶有示例代碼)。 – Wain 2014-09-12 07:37:06

+0

更新了我的問題。問題也在github上完成。 – Sol 2014-09-16 14:11:44

回答

0

這應該從來沒有奏效。

服務器應該使用非2xx HTTP響應代碼向您返回響應,並且您應該使用該代碼來觸發您的響應描述符。

事實上,您一直觸發響應描述符並告訴它尋找 - 並鑽入 - authorisation-fail。所以,如果這個關鍵字存在但是是空的,你應該得到一個空的RKErrorMessage

如果你有一些其他的響應描述符匹配之前的響應(即任何其他與無路徑模式和成功響應代碼),那麼這將永遠不會工作,這就是爲什麼你得到一個空的字典。

因此,最好的選擇是更改服務器響應,解決方法是使用動態映射來檢查內容並提供良好的響應或使用的錯誤映射。