我看到很多Reachability示例,其中人員只在可達性狀態更改時才顯示消息。
但最近,我在Foursquare應用程序中看到,每當用戶嘗試進行需要Internet連接的操作時,它們都會顯示一條消息。
我認爲這是更強大和更好的用戶體驗提醒用戶,他不能做任何事情,沒有互聯網。主要是因爲用戶可以在應用之間切換,做別的事情,忘記他回來時沒有任何聯繫。
此外,只要他們獲得連接,我可以看到他們從互聯網獲取數據並刷新UI。我應該在每個UIViewController中偵聽可達性更新嗎?
我真正想要的是做到這一點的最佳方式。這是如何完成的?
他們是否有一個通用的UIViewController,每次需要連接時都會檢查可達性?
或者他們有每種互聯網請求之前有一種代理類,取消請求並顯示一條消息? 你們是如何處理這個問題的?
謝謝。
編輯:
我想出了使用AFNetworking也提供箱子到達狀態的解決方案。
基本上我創建了一個AFHTTPClient並在其上設置了一個可達性回調模塊來監聽狀態變化。 AFHTTPClient對象是應用程序範圍的(一種單例)。 (實際上,我需要每臺主機都有一個AFHTTPClient,以便達到a.com,b.com ...)。
然後,當我需要執行一個請求時,我創建了一個新的AFHTTPRequestOperation(AFJSONRequestOperation,在我的情況下),並將其排入我的AFHTTPClient對象。 在操作的故障塊中,我檢查主機是否可以通過AFHTTPClient的networkReachabilityStatus
屬性訪問。如果無法訪問,我會顯示一條消息,指出用戶沒有互聯網連接。
我把它包起來,所以我不必每次創建操作都這樣做。所以現在在應用程序中,每當用戶在沒有連接時嘗試做某件事,他就會收到一條消息,記住他沒有互聯網接入。
我也使用可達性回調來重新加載屏幕上的數據,一旦我得到連接(或更確切地說,我應該有一個連接)。
我不知道這是否是最佳做法,但我認爲很高興知道應用程序負責在新連接可用時重新加載重要數據。
如果有人對示例代碼感興趣,我可以提供它。
非常感謝這個答案,你還記得它是哪個WWDC談話/視頻嗎? – florian
不確定要記住它。嘗試會話706和225(會話的第二部分)。 – viggio24