iOS 檢測(cè)網(wǎng)絡(luò)狀態(tài)的兩種方法
一般有兩種方式,都是第三方的框架,輪子嘛,能用就先用著,后面再優(yōu)化。
一:Reachability
1.首先在AppDelegate.h添加頭文件"Reachability.h",導(dǎo)入框架SystemConfiguration.frame。
2. 在AppDelegate.m中這樣實(shí)現(xiàn):
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ //開啟網(wǎng)絡(luò)狀況的監(jiān)聽 //來訂閱實(shí)時(shí)的網(wǎng)絡(luò)狀態(tài)變化通知。導(dǎo)入Reachability.h頭文件,然后注冊(cè)一個(gè)對(duì)象來訂閱網(wǎng)絡(luò)狀態(tài)變化的信息,網(wǎng)絡(luò)狀態(tài)變化的信息名稱為kReachabilityChanged-Notification [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil]; //通過檢查某個(gè)主機(jī)能否訪問來判斷當(dāng)前網(wǎng)絡(luò)是否可用: self.hostReach = [Reachability reachabilityWithHostName:@"www.baidu.com"] ; //開始監(jiān)聽,會(huì)啟動(dòng)一個(gè)run loop [self.hostReach startNotifier]; } -(void)reachabilityChanged:(NSNotification *)note{ Reachability *currReach = [note object]; NSParameterAssert([currReach isKindOfClass:[Reachability class]]); //對(duì)連接改變做出響應(yīng)處理動(dòng)作 NetworkStatus status = [currReach currentReachabilityStatus]; //如果沒有連接到網(wǎng)絡(luò)就彈出提醒實(shí)況 self.isReachable = YES; if(status == NotReachable){ UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"網(wǎng)絡(luò)連接異常" message:nil delegate:nil cancelButtonTitle:@"確定" otherButtonTitles:nil]; [alert show]; [alert release]; self.isReachable = NO; return; } if (status==kReachableViaWiFi||status==kReachableViaWWAN) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"網(wǎng)絡(luò)連接信息" message:@"網(wǎng)絡(luò)連接正常" delegate:nil cancelButtonTitle:@"確定" otherButtonTitles:nil]; // [alert show]; [alert release]; self.isReachable = YES; } }
然后在每個(gè)頁面的viewWillAppear:加上:
-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:YES]; AppDelegate *appDlg = (AppDelegate *)[[UIApplication sharedApplication] delegate]; if(appDlg.isReachable){ NSLog(@"網(wǎng)絡(luò)已連接");//執(zhí)行網(wǎng)絡(luò)正常時(shí)的代碼 } else{ NSLog(@"網(wǎng)絡(luò)連接異常");//執(zhí)行網(wǎng)絡(luò)異常時(shí)的代碼 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"網(wǎng)絡(luò)連接異常" message:nil delegate:nil cancelButtonTitle:@"確定" otherButtonTitles:nil]; [alert show]; [alert release]; } }
這樣就可以檢查到在運(yùn)行程序時(shí)網(wǎng)絡(luò)突然的中斷和連接。Reachability類實(shí)際上是蘋果公司對(duì)SCNetworkReachability API的封裝,這個(gè)API定義在SystemConfigure.framework庫中。如果有其他特別的需求,也可以直接使用這個(gè)原生的SCNetworkReachability類。
二:AFNetworking監(jiān)測(cè)
1.導(dǎo)入框架,和頭文件#import <AFNetworkReachabilityManager.h>
2.代碼:
-(void)afn{ //1.創(chuàng)建網(wǎng)絡(luò)狀態(tài)監(jiān)測(cè)管理者 AFNetworkReachabilityManager *manger = [AFNetworkReachabilityManager sharedManager]; //開啟監(jiān)聽,記得開啟,不然不走block [manger startMonitoring]; //2.監(jiān)聽改變 [manger setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { /* AFNetworkReachabilityStatusUnknown = -1, AFNetworkReachabilityStatusNotReachable = 0, AFNetworkReachabilityStatusReachableViaWWAN = 1, AFNetworkReachabilityStatusReachableViaWiFi = 2, */ switch (status) { case AFNetworkReachabilityStatusUnknown: NSLog(@"未知"); break; case AFNetworkReachabilityStatusNotReachable: NSLog(@"沒有網(wǎng)絡(luò)"); break; case AFNetworkReachabilityStatusReachableViaWWAN: NSLog(@"3G|4G"); break; case AFNetworkReachabilityStatusReachableViaWiFi: NSLog(@"WiFi"); break; default: break; } }]; }
以上所述是小編給大家介紹的iOS 檢測(cè)網(wǎng)絡(luò)狀態(tài)的兩種方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- iOS實(shí)現(xiàn)實(shí)時(shí)檢測(cè)網(wǎng)絡(luò)狀態(tài)的示例代碼
- iOS實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)的改變
- iOS中如何判斷當(dāng)前網(wǎng)絡(luò)環(huán)境是2G/3G/4G/5G/WiFi
- iOS 12+ 中檢測(cè)網(wǎng)絡(luò)訪問的方法
- 詳解iOS AFNetworking取消正在進(jìn)行的網(wǎng)絡(luò)請(qǐng)求
- iOS中從網(wǎng)絡(luò)獲取數(shù)據(jù)的幾種方法的比較
- iOS中多網(wǎng)絡(luò)請(qǐng)求的線程安全詳解
- iOS 本地視頻和網(wǎng)絡(luò)視頻流播放實(shí)例代碼
- 詳解IOS判斷當(dāng)前網(wǎng)絡(luò)狀態(tài)的三種方法
相關(guān)文章
IOS UI學(xué)習(xí)教程之設(shè)置UITextField各種屬性
這篇文章主要為大家詳細(xì)介紹了IOS UI學(xué)習(xí)教程之設(shè)置UITextField各種屬性,感興趣的小伙伴們可以參考一下2016-03-03IOS中UITextView或UITextField字?jǐn)?shù)限制的實(shí)現(xiàn)
這篇文章主要介紹了IOS中UITextView或UITextField字?jǐn)?shù)限制的實(shí)現(xiàn)的相關(guān)資料,希望通過本文能幫助到大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-10-10Objective-C學(xué)習(xí)之ARC的實(shí)現(xiàn)方法
自動(dòng)引用計(jì)數(shù)(Automatic Reference Counting, ARC)把壓在程序員們肩頭的管理內(nèi)存的重?fù)?dān)卸除了不少,更不用說讓跟蹤內(nèi)存泄漏那樣的煩心事也少了很多。下面這篇文章主要給大家介紹了關(guān)于Objective-C學(xué)習(xí)之ARC的實(shí)現(xiàn)方法,需要的朋友可以參考借鑒下。2017-12-12iOS 開發(fā)之 - 關(guān)閉鍵盤 退出鍵盤 的5種方式
這篇文章主要介紹了iOS 開發(fā)之 - 關(guān)閉鍵盤 退出鍵盤 的5種方式的相關(guān)資料,需要的朋友可以參考下2016-09-09iOS開發(fā)之獲取系統(tǒng)相冊(cè)中的圖片與視頻教程(內(nèi)帶url轉(zhuǎn)換)
本篇文章主要介紹了iOS開發(fā)之獲取系統(tǒng)相冊(cè)中的圖片與視頻教程(內(nèi)帶url轉(zhuǎn)換),主要介紹AssetsLibrary 框架,具有一定的參考價(jià)值,有需要的可以了解一下。2016-11-11