2009-08-10 94 views
10

我正在使用NSMutableURLRequest連接到網站以獲取JSON響應。我這樣做是通過生成請求,然後使用NSURLConnection和self的委託來處理異步連接。我實現了所有正常委託方法:使用委託時超時處理NSURLRequest

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

所有與獲取數據回完美的作品,處理出現的任何錯誤,等等。然而隨着對的NSURLRequest超時設置爲10秒我似乎並沒有在這些方法中調用(我期望didFailWithError被調用)。它只是永遠坐在那裏,我沒有通知它超時。

閱讀iPhone API文檔我沒有看到什麼應該在超時發生時發生,只是您可以設置超時值。應該發生什麼?我沒有看到API中的其他委託方法可以提供幫助。我不必手動檢查超時,是嗎?超時只用於同步請求嗎?

+0

我同意Corey應該在didDailWithError方法中獲得它,但它永遠不會被調用。該方法中的斷點和日誌顯示它永遠不會被調用超時。 – Parrots 2009-08-27 15:50:44

+1

對於更多的上下文,如果它有所作爲,我使用的方法在http://stackoverflow.com/questions/332276/managing-multiple-asynchronous-nsurlconnection-connections的回答中討論了連接I有突出的。 – Parrots 2009-08-27 15:56:00

+0

我看起來像這可能是在3.0的測試版SDK中的錯誤,因爲只要最終發佈它按預期工作。 – Parrots 2010-01-12 18:16:06

回答

12

你超時是在這個方法獲得:

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
+0

如何測試超時?這似乎是一個通用的錯誤處理程序。 – devios1 2013-09-10 21:44:08

+14

找到它了:'error.code == NSURLErrorTimedOut' – devios1 2013-09-10 21:46:52

1

在每個方法中放入一些日誌語句並檢查它們給出的內容。每當它超時時,你肯定會在控制檯上收到關於超時的通知。我收到通知。檢查你的代碼,如果你仍然有問題,請告訴我們。

4

U將BR接受這種類型的iofo的:在

沒有失敗,

error: Error Domain=NSURLErrorDomain Code=-1001 UserInfo=0xed4870 "timed out"

+0

注意'NSURLErrorTimedOut = -1001' – devios1 2013-09-10 21:47:23

3

超時行爲有點古怪,請參閱Apple的開發人員論壇上的this thread

+1

那個線程太棒了!謝謝!請注意,線程提供了對https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/Reference/reference.html的引用,其中列出了NSURLErrorDomain中的所有錯誤 – 2013-04-05 15:27:46

1

我所做的是這樣的:

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ 
    if (error.code == -1001){ 
     [self showTimeoutAlert];//My method to show dialog with timeout message. 
    } else { 
     [self showInvalidURLAlert];//My method to show dialog with bad URL message. 
    } 
} 

正如之前所說-1001是超時,在其他測試中我得到-1003(不良URL或無連接avaliable)。

我的目標是對待超時,所以我把其他任何東西都視爲錯誤的URL。