2011-10-02 49 views
2

我剛開始嘗試使用我正在構建的iOS應用程序的RestKit。我通常使用ASIHttpRequest,但我想主要針對JSON和CoreData之間的對象映射測試RestKit。關於RestKit有一些很棒的事情,但我遇到了一個真正讓它感覺不足的問題,除非我做錯了什麼或錯過了什麼。我希望這裏有人能指導我。RestKit處理不同的HTTP狀態代碼

我正在使用RKObjectLoader使異步&同步調用REST API。我的服務旨在發送正確的HTTP狀態碼以及某種描述,401是API需要經過身份驗證的用戶的示例。

我的問題是,如果我收到401錯誤,RestKit會停止正常工作。 RKResponse對象的狀態碼爲0,即使它有一個有效載荷。我敢肯定,這歸結於NSURLConnection對HTTP狀態的處理不佳,但我期望RestKit以某種方式繞過這一點。特別是因爲RKResponse類有很多包裝函數來確定響應的狀態碼(isOK,isCreated,isForbidden,isUnauthorized等)。

相比之下,ASIHttpRequest不使用NSURLConnection,而是使用較低級別的CFNetwork代碼。 ASIHttpRequest允許我確切地看到通過HTTP返回的內容,而不會發出左側&右側的錯誤。

問題是,我做錯了什麼,或者這是預料之外的RestKit行爲?有沒有人能成功地打電話給[RKResponse isAuthenticated]?儘管對我來說不確定,但在這方面,在異步和同步模式下運行有什麼區別。儘管底層代碼只是調用異步操作,但我確實在某處讀到NSURLConnection在同步模式下運行的方式會有所不同。這與我使用RKObjectLoader而不僅僅是RKRequest有關嗎?也許事實上有效載荷不能映射到模型會引發憤怒,但似乎在實際進行映射之前,代碼在RKRequest.send內同步更早。

底線是我的代碼需要能夠自由讀取HTTP狀態碼。任何指導將不勝感激。

海德爾

+0

你表演時你所遇到的問題與401個狀態碼同步或異步調用?另外,您可以通過以下方式打開各種網絡組件的日誌記錄後發佈日誌輸出:RKLogConfigureByName(「RestKit/Network」,RKLogLevelTrace); RKLogConfigureByName(「RestKit/Network/Queue」,RKLogLevelDebug); RKLogConfigureByName(「RestKit/Network/Cache」,RKLogLevelTrace); – jeffarena

+0

當我實際收到401狀態碼時,我可以確認0狀態碼。我已調試並跟蹤它,上傳它以保持格式:http://reneras.nl/error.html這是否清除了任何東西jeffarena? – 2011-10-05 09:59:33

+0

我有同樣的問題,statusCode 0和isUnauthorized FALSE,當服務器響應401因爲無效的用戶/密碼。在其他情況下(沒有用戶/密碼401讀取得好) – Leito

回答

0

http://groups.google.com/group/restkit/msg/839b84452f4b3e26

「......身份驗證失敗時,認證挑戰被取消,有效空隙的請求。」

UPDATE:

RestKit已經包含了這樣的委託方法:

(void)request:(RKRequest *)request didFailAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge; 

觸發器之前

(void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error 

當HTTP基本身份驗證失敗,所以我們可以使用它代替。

+0

不幸的是,沒有像didFailAuthenticationChallenge(不再?)這樣的方法嗎? – jpalten