2013-02-04 36 views
1

有好幾次我用的方法...NSError不填充之前

NSURLResponse *response; 
NSError *error; 

NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

發送/在的NSOperation同步接收數據時,它已經奏效。

我正在開發一個新項目(新API,新服務器),錯誤只是沒有被填充。

我使用Charles代理來監聽網絡流量,我可以看到「響應代碼500內部服務器錯誤」從查詢中的失敗請求中回來,但在應用程序中錯誤對象始終爲零。

就像我說過的,我之前使用過這種加載方式,並且如果發生錯誤,錯誤總是被填充。

服務器端有什麼我可以指出的服務器端開發?他堅持認爲我一定在做錯事。我唯一不明白的是Charles正在從中獲取響應代碼500。

N.B.問題不在於發生錯誤。問題是,當它發生時,NSError對象不會將它報告給我。只是爲了清除它,以防有人告訴我要求服務器開發人員修復錯誤。 :-)

+0

爲什麼選擇downvote?至少給我一些信息爲什麼? – Fogmeister

回答

7

您的錯誤對象未填充,因爲請求從NSURLConnection的角度成功 - 也就是說,它能夠將數據發送到服務器並接收響應。

對於協議特定的錯誤,您需要檢查您返回的NSURLResponse。在這種情況下,將響應轉換爲NSHTTPURLResponse並調用-statusCode

2

如果沒有來自服務器的響應或者沒有有效的HTTP響應(例如,連接損耗等

「響應代碼500內部服務器錯誤」是指有一個內部服務器錯誤,您的服務器返回的響應代碼500的HTTP消息,您應該使用NSHTTPURLResponse代替NSURLResponse並調用statusCode方法檢查HTTP響應代碼。如果響應代碼以2開頭,那麼一切都很好。所以我通常會有這樣的支票:statusCode/100 == 2

有關更多HTTP響應代碼,請參閱http://en.wikipedia.org/w/index.php?title=HTTP_response_codes