前言:當應用程序需要訪問網絡的時候,它首先應該檢查設備的網絡狀態,確認設備的網絡環境及連接情況,并針對這些情況提醒用戶做出相應的處理。最好能監聽設備的網絡狀態的改變,當設備網絡狀態連接、斷開時,程序也應該有相應的處理。
開發工具:xcode6.3.2 操作系統:OS X Yosemite10.10.4 學習來源:《瘋狂IOS講義(下)》中的ios網絡應用編程
1、下載,添加Reachability類。
官網下載網址:
https://developer.apple.com/library/prerelease/ios/samplecode/Reachability/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007324-Intro-DontLinkElementID_2

獲取下載的zip文件包找到里面的:reachability.m和reachability.h然后放進工程下:

2、
添加SystemConfiguration.framework框架

然后打開Main.storyborad界面設計文件,添加1個UILabel、1個UITextField和3個UIButton,并將它們擺放整齊,如圖:

為了在程序鐘訪問界面上的文本框,可以將文本框綁定到siteField IBOulet屬性;為了讓程序能響應界面上3個按鈕的點擊事件,還需要為“測試”按鈕的“Touch Up Inside”事件綁定testNetStatus事件處理方法,為“測試wifi”按鈕的“Touch Up Inside”事件綁定testWifi事件處理方法,為了“測試3G/4G”按鈕的“Touch Up Inside”事件綁定testInternet事件處理方法。
3、實現網絡監聽以及按鈕測試的代碼:
要點:
<1>如果是要自動監聽手機聯網的狀態,就需要使用默認的通知中心對象[NSNotificationCenter defaultCenter]來通過監聽
kReachabilityChangedNotification通知,并且當通知中心收到通知,就觸發另一個自定義的成員方法的reachabilityChanged:方法。
源代碼寫法:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(netChanged:) name:kReachabilityChangedNotification
object:nil];
<2>然后是不管是在上面創建通信中心之后,還是在為按鈕組件的觸發點擊事件綁定的代碼中,都要創建一個網絡可達型對象(有兩種):
-1-Reachability *reach = [Reachability reachabilityWithHostName:”www….”]
-2-Reachability *reach =[Reachability reachabilityForInternetConnection]
<3>然后通過Reachability對象獲取當前網絡狀態:
[reach currentReachabilityStatus]
這個方法返回的就是Reachability聲明中聲明了的枚舉三個枚舉值:
typedef enum : NSInteger { NotReachable = 0, ReachableViaWiFi, ReachableViaWWAN } NetworkStatus; |
也就是說這三個值代表著網絡連接三種狀態。
另外補充:
很奇怪的是:和《瘋狂IOS講義下》(8.1檢測網絡狀態)提供的源代碼不一樣的地方是以上網絡狀態除了綁定組件監聽事件,也就是自動監聽網絡狀態的代碼可以僅僅寫在托管類AppDelegate.m中就可以運行,ViewController.m可以不寫任何代碼就可以運行。
但是自己新建的oc程序,然后按照同樣的步驟壓迫實現同樣效果卻需要額外的條件:
必須在ViewController.h聲明一個私有的成員變量:
然后在ViewController.m中用conn創建一個Reachability對象,并且 [conn startNotifier]。 |
然后才能在ViewController.m中或者AppDelegate.m中設置自動監聽網絡狀態的代碼。
----------------------------------------------------------------------------------------------------------------------------------------------------------
以上是本人半年前的學習積累,其中關于最后的"另外補充"其實就是很基本的原因,就是沒有使用property的全局作用使得Reachability只能作用于某個方法內部,從而會在程序運行過程中就會出現無效的結果。
下面是本人在2016年2月25日更新的網絡監聽代碼使用快速一覽
----------------------------------------------------------------------------------------------------------------------------------------------------------
