iOS开发网络篇—Reachability检测网络状态
前言:當(dāng)應(yīng)用程序需要訪問(wèn)網(wǎng)絡(luò)的時(shí)候,它首先應(yīng)該檢查設(shè)備的網(wǎng)絡(luò)狀態(tài),確認(rèn)設(shè)備的網(wǎng)絡(luò)環(huán)境及連接情況,并針對(duì)這些情況提醒用戶做出相應(yīng)的處理。最好能監(jiān)聽設(shè)備的網(wǎng)絡(luò)狀態(tài)的改變,當(dāng)設(shè)備網(wǎng)絡(luò)狀態(tài)連接、斷開時(shí),程序也應(yīng)該有相應(yīng)的處理。
開發(fā)工具:xcode6.3.2 操作系統(tǒng):OS X Yosemite10.10.4 學(xué)習(xí)來(lái)源:《瘋狂IOS講義(下)》中的ios網(wǎng)絡(luò)應(yīng)用編程
1、下載,添加Reachability類。
官網(wǎng)下載網(wǎng)址:
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然后放進(jìn)工程下:
2、
添加SystemConfiguration.framework框架
然后打開Main.storyborad界面設(shè)計(jì)文件,添加1個(gè)UILabel、1個(gè)UITextField和3個(gè)UIButton,并將它們擺放整齊,如圖:
為了在程序鐘訪問(wèn)界面上的文本框,可以將文本框綁定到siteField IBOulet屬性;為了讓程序能響應(yīng)界面上3個(gè)按鈕的點(diǎn)擊事件,還需要為“測(cè)試”按鈕的“Touch Up Inside”事件綁定testNetStatus事件處理方法,為“測(cè)試wifi”按鈕的“Touch Up Inside”事件綁定testWifi事件處理方法,為了“測(cè)試3G/4G”按鈕的“Touch Up Inside”事件綁定testInternet事件處理方法。
3、實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)聽以及按鈕測(cè)試的代碼:
要點(diǎn):
<1>如果是要自動(dòng)監(jiān)聽手機(jī)聯(lián)網(wǎng)的狀態(tài),就需要使用默認(rèn)的通知中心對(duì)象[NSNotificationCenter defaultCenter]來(lái)通過(guò)監(jiān)聽
kReachabilityChangedNotification通知,并且當(dāng)通知中心收到通知,就觸發(fā)另一個(gè)自定義的成員方法的reachabilityChanged:方法。
源代碼寫法:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(netChanged:) name:kReachabilityChangedNotification
object:nil];
<2>然后是不管是在上面創(chuàng)建通信中心之后,還是在為按鈕組件的觸發(fā)點(diǎn)擊事件綁定的代碼中,都要?jiǎng)?chuàng)建一個(gè)網(wǎng)絡(luò)可達(dá)型對(duì)象(有兩種):
-1-Reachability *reach = [Reachability reachabilityWithHostName:”www….”]
-2-Reachability *reach =[Reachability reachabilityForInternetConnection]
<3>然后通過(guò)Reachability對(duì)象獲取當(dāng)前網(wǎng)絡(luò)狀態(tài):
[reach currentReachabilityStatus]
這個(gè)方法返回的就是Reachability聲明中聲明了的枚舉三個(gè)枚舉值:
| typedef enum : NSInteger { NotReachable = 0, ReachableViaWiFi, ReachableViaWWAN } NetworkStatus; |
也就是說(shuō)這三個(gè)值代表著網(wǎng)絡(luò)連接三種狀態(tài)。
另外補(bǔ)充:
很奇怪的是:和《瘋狂IOS講義下》(8.1檢測(cè)網(wǎng)絡(luò)狀態(tài))提供的源代碼不一樣的地方是以上網(wǎng)絡(luò)狀態(tài)除了綁定組件監(jiān)聽事件,也就是自動(dòng)監(jiān)聽網(wǎng)絡(luò)狀態(tài)的代碼可以僅僅寫在托管類AppDelegate.m中就可以運(yùn)行,ViewController.m可以不寫任何代碼就可以運(yùn)行。
但是自己新建的oc程序,然后按照同樣的步驟壓迫實(shí)現(xiàn)同樣效果卻需要額外的條件:
| 必須在ViewController.h聲明一個(gè)私有的成員變量:
然后在ViewController.m中用conn創(chuàng)建一個(gè)Reachability對(duì)象,并且 [conn startNotifier]。 |
然后才能在ViewController.m中或者AppDelegate.m中設(shè)置自動(dòng)監(jiān)聽網(wǎng)絡(luò)狀態(tài)的代碼。
----------------------------------------------------------------------------------------------------------------------------------------------------------
以上是本人半年前的學(xué)習(xí)積累,其中關(guān)于最后的"另外補(bǔ)充"其實(shí)就是很基本的原因,就是沒(méi)有使用property的全局作用使得Reachability只能作用于某個(gè)方法內(nèi)部,從而會(huì)在程序運(yùn)行過(guò)程中就會(huì)出現(xiàn)無(wú)效的結(jié)果。
下面是本人在2016年2月25日更新的網(wǎng)絡(luò)監(jiān)聽代碼使用快速一覽
----------------------------------------------------------------------------------------------------------------------------------------------------------
總結(jié)
以上是生活随笔為你收集整理的iOS开发网络篇—Reachability检测网络状态的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ***使用PHP实现文件上传和多文件上传
- 下一篇: eclipse 使用指南