在iOS中判斷網路狀態
很久沒有更新GitBook了,其實不是在下懶惰(好啦是有那麼一點),是因為在下在今年八月底的時候想尋求更好的發展,於是離開了原本的公司,到了新公司後一直處在很忙的狀態,所以都沒時間更新。
今天來說一下即時的判斷網路狀態,或許網路上已經有非常多資料了,不過自己寫過之後才知道很多方法都不能用,在這邊提供在下自己的用法。
首先蘋果官方已經有提供這一塊方法:點我進入。
整個Demo算是非常完整的,在這邊說明一下我的用法:
1.首先直接把Demo裡面的Reachability.h跟Reachability.m加進你的專案。
2.在你要用的地方#import進來,或者你也可以做在AppDelegate裡面,畢竟有可能會有很多地方需要用到。
3.先宣告兩個Reachability物件:
@property (nonatomic) Reachability *hostReachability;
@property (nonatomic) Reachability *internetReachability;
4.在View Controller 的 viewDidLoad或是 Appdelegate 的 didFinishLaunchingWithOptions裡加入監聽及上面兩個物件的設置:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
self.hostReachability = [Reachability reachabilityWithHostName:@"www.apple.com"];
[self.hostReachability startNotifier];
[self updateInterfaceWithReachability:self.hostReachability];
self.internetReachability = [Reachability reachabilityForInternetConnection];
[self.internetReachability startNotifier];
[self updateInterfaceWithReachability:self.internetReachability];
5.然後再設置監聽的事件:
- (void) reachabilityChanged:(NSNotification *)note
{
Reachability* curReach = [note object];
NSParameterAssert([curReach isKindOfClass:[Reachability class]]);
[self updateInterfaceWithReachability:curReach];
}
- (void)updateInterfaceWithReachability:(Reachability *)reachability
{
NetworkStatus netStatus = [reachability currentReachabilityStatus];
switch (netStatus)
{
case NotReachable: {
NSLog(@"NotReachable");
break;
}
case ReachableViaWWAN: {
NSLog(@"ReachableViaWWAN");
break;
}
case ReachableViaWiFi: {
NSLog(@"ReachableViaWiFi");
break;
}
}
}
基本上netStatus就分三種,分別是NotReachable(無網路服務狀態)、ReachableViaWWAN(手機網路狀態)、ReachableViaWiFi(WiFi狀態),到這邊怎麼使用相信各位一定都很清楚了,例如某些很大的下載任務,你想要讓他只能在WiFi的狀態下進行、或是突然沒有網路的時候,要做什麼處理......之類的,當然AFNetworking也有提供相關的方法,關鍵字:AFNetworkReachabilityManager,不過我們今天討論蘋果官網所提供的方法,有興趣的朋友可以自己找找資料試試看。