2012-08-17 43 views
0

我使用NSURLConnection的與我的局域網上的Web服務進行通信。當使用Xcode模擬器時,一切都按預期工作。但是,使用iPhone時,連接通常會超時(但並非總是)。NSURLConnection的間歇性故障iPhone設備上的LAN

iPhone是通過wifi連接到LAN。我可以一直使用Safari瀏覽Web服務器(託管Web服務)。

但是,該應用程序大多失敗。它返回didFailWithError函數報告「請求超時」。

該應用程序將間歇性地成功(確切地表現如預期)。我看不到成功或失敗的模式。它可能會失敗多次,然後成功,然後再次失敗(無需重新啓動應用程序)。我估計有90%以上的失敗率。

網絡服務總是收到請求和總是迴應。看來設備沒有收到或處理響應失敗。

我可以看到我的網絡沒有明顯的問題。當然,沒有IP地址衝突。

我完全新的應用程序,蘋果的Xcode和iPhone。所以這對你來說可能是非常明顯的。任何想法,我可以看看解決這個問題?

我目前使用的開發環境如下:

  • 的Mac OS X(10.7.4)
  • 的Xcode 4(靶向4.3)
  • 的iPhone 3GS(5.1.1)

回答

0

顯然我不能給你絕對的答案,但可以希望幫助你跟蹤問題。

首先,你想審覈你的web服務。將JPEG圖像放入公共Dropbox文件夾中。現在嘗試使用您的代碼下載該映像,並使用Safari查看該映像。如果Safari能夠正常工作,但是你的代碼不能,那麼你知道你的代碼是問題。

如果都失敗,則手機可能有一個壞的收發器,或WiFi網絡可能是古怪。把手機拿到一些公共的WIFI位置並重做測試。如果二者在第二個網絡上仍然失敗,手機可能有缺陷。

如果在所有情況下Safari瀏覽器的工作原理,但你的代碼沒有,那麼請上傳儘可能多的代碼儘可能的。另外,如果使用異步接口,您是否重定向?要求憑證?等我會傾向於添加每個NSURLConnection委託方法,並至少添加一個日誌,以便知道發生了什麼 - 這是記錄所有響應。您也可以從響應中獲取html返回代碼:

assert([response isKindOfClass:[NSHTTPURLResponse class]]); 
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; 
htmlStatus = [httpResponse statusCode]; 
if(htmlStatus != 200) NSLog(@"Server Response code %i", htmlStatus); 
+0

是的,我的代碼是問題。手機wifi在當地的咖啡廳工作正常。 Safari一直在我的局域網上工作。我寫了一個快速簡單的測試應用程序(請求來自ws的文本響應),該應用程序一直運行。我的失敗應用程序有兩個視圖,每個視圖都有自己的NSURLConnection。雖然應用程序只有一個活動連接失敗,但我將首先將NSURLConnection代碼重構爲一個類。謝謝。答案接受,但任何進一步的提示讚賞例如我是否應該一次只運行一個查詢?它可以在模擬器上使用兩個,但... – Polly 2012-08-17 13:14:57

+0

我在異步查詢並登錄每個委託方法。不涉及授權。我想我需要只有一個NSURLConnection的實例。這就是我現在要嘗試的。請說,如果這聽起來是一個合理的方向,或者如果還有其他事情想到。 – Polly 2012-08-17 13:28:11

+0

是的,您使用一個NSURLConnection每個Web事務。在我的應用程序中,我實際上已經在NSOperationQueue中排隊了數百次提取,並且其工作完美。如果你想看到一個快速簡單的方法來看看https://github.com/dhoerl/NSOperation-WebFetches-MadeEasy - 這是一個簡單易用的技術,你可以找到。該項目構建了一個可以運行的演示應用程序。 – 2012-08-17 13:41:52

相關問題