我使用RestKit與REST API進行交互。對於某些操作,例如HTTP PUT/POST/DELETE,我只關心響應狀態代碼(200或500等),並且不關心響應數據,即使API確實發回數據。如何不映射RestKit響應?
爲了提高性能,有沒有辦法配置RestKit來避免映射響應?看起來,如果我沒有設置響應描述符,我得到錯誤「沒有響應描述符匹配加載的響應」
我使用RestKit與REST API進行交互。對於某些操作,例如HTTP PUT/POST/DELETE,我只關心響應狀態代碼(200或500等),並且不關心響應數據,即使API確實發回數據。如何不映射RestKit響應?
爲了提高性能,有沒有辦法配置RestKit來避免映射響應?看起來,如果我沒有設置響應描述符,我得到錯誤「沒有響應描述符匹配加載的響應」
不,因爲錯誤表明您需要定義一些響應描述符。它不需要很複雜(它可以將單個數據項(如狀態標誌)映射到NSDictionary中)。
除非您有理由(分析顯示問題),否則不要擔心性能。
也就是說,RestKit在運行時最有效的方式是不要有多個響應描述符來搜索,因此儘可能使用路徑模式和關鍵路徑。
如果您不需要將響應數據映射到對象,也不需要映射對象來請求參數,那麼您可能會對使用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
}];
我的解決辦法是隻使用一個映射一個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];
是的,它可以工作,但RestKit仍然記錄一個錯誤(沒有崩潰),「dding映射錯誤:找不到任何屬性的可映射值或關係映射「 - 沒有更優雅的東西嗎? – 2013-12-31 19:11:08
使用[NSNull類],應該刪除警告 – 2014-07-30 06:43:44
雖然這是一個很好的解決辦法,你還是不得不刪除對象在請求成功後從核心數據手動提取,因此失去了Reskit的一些功能。我仍然投了票,但上面的[NSNull類]的答案似乎是最好的答案。 – 2014-07-30 06:44:59
實際上,由於此方法使用AFHTTPClient,因此響應不會映射到核心數據中的任何內容,因此在成功後沒有任何內容需要手動刪除。然而,使用RestKit中的HTTPClient對象有一個新的缺點:AFNetworking 2.0不再具有AFHTTPClient。儘管RestKit仍在使用AFNetworking 1.3,但它最終可能會得到更新,並指出不贊成使用的HTTPClient可能會在稍後添加到遷移工作中。 – nioq 2014-07-30 15:24:35
我的不好,我的意思是說,映射不會完成,所以你必須手動完成。忽略刪除評論(我的代碼太多了),我的意思正是你說的 – 2014-07-30 16:12:15