在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,不過我們今天討論蘋果官網所提供的方法,有興趣的朋友可以自己找找資料試試看。

results matching ""

    No results matching ""