2013-05-11 109 views
10

我使用RestKit與REST API進行交互。對於某些操作,例如HTTP PUT/POST/DELETE,我只關心響應狀態代碼(200或500等),並且不關心響應數據,即使API確實發回數據。如何不映射RestKit響應?

爲了提高性能,有沒有辦法配置RestKit來避免映射響應?看起來,如果我沒有設置響應描述符,我得到錯誤「沒有響應描述符匹配加載的響應」

回答

5

不,因爲錯誤表明您需要定義一些響應描述符。它不需要很複雜(它可以將單個數據項(如狀態標誌)映射到NSDictionary中)。

除非您有理由(分析顯示問題),否則不要擔心性能。

也就是說,RestKit在運行時最有效的方式是不要有多個響應描述符來搜索,因此儘可能使用路徑模式和關鍵路徑。

8

如果您不需要將響應數據映射到對象,也不需要映射對象來請求參數,那麼您可能會對使用AFHTTPClient感興趣,而這正是RestKit 0.20無論如何使用的。您可以訪問RestKit自身使用的AFHTTPClient對象,因此您不必再次設置基本URL或身份驗證標頭等。

下面是一個簡單的GET例如:

[[[RKObjectManager sharedManager] HTTPClient] getPath:@"http://example.com" 
              parameters:nil 
               success:^(AFHTTPRequestOperation *operation, id responseObject) { 
                // handle success 
               } 
               failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
                // response code is in operation.response.statusCode 
               }]; 
+0

雖然這是一個很好的解決辦法,你還是不得不刪除對象在請求成功後從核心數據手動提取,因此失去了Reskit的一些功能。我仍然投了票,但上面的[NSNull類]的答案似乎是最好的答案。 – 2014-07-30 06:44:59

+0

實際上,由於此方法使用AFHTTPClient,因此響應不會映射到核心數據中的任何內容,因此在成功後沒有任何內容需要手動刪除。然而,使用RestKit中的HTTPClient對象有一個新的缺點:AFNetworking 2.0不再具有AFHTTPClient。儘管RestKit仍在使用AFNetworking 1.3,但它最終可能會得到更新,並指出不贊成使用的HTTPClient可能會在稍後添加到遷移工作中。 – nioq 2014-07-30 15:24:35

+0

我的不好,我的意思是說,映射不會完成,所以你必須手動完成。忽略刪除評論(我的代碼太多了),我的意思正是你說的 – 2014-07-30 16:12:15

19

我的解決辦法是隻使用一個映射一個NSObject

RKObjectMapping * emptyMapping = [RKObjectMapping mappingForClass:[NSObject class]]; 
RKResponseDescriptor * responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:emptyMapping 
                         method:RKRequestMethodPOST 
                        pathPattern:API_SURVEY_UPLOAD keyPath:nil 
                        statusCodes:[NSIndexSet indexSetWithIndex:200]]; 
[objectManager addResponseDescriptor:responseDescriptor]; 
+0

是的,它可以工作,但RestKit仍然記錄一個錯誤(沒有崩潰),「dding映射錯誤:找不到任何屬性的可映射值或關係映射「 - 沒有更優雅的東西嗎? – 2013-12-31 19:11:08

+6

使用[NSNull類],應該刪除警告 – 2014-07-30 06:43:44