iOS檢測是否有網絡連接

ngmm 9年前發布 | 4K 次閱讀 Objective-C IOS

如果你的工程里面是用的AFNetworking請求網絡數據的話,那么可以直接使用 AFNetworkReachabilityManager.h來判斷網絡狀態!如果是用的ASI的話,里面自帶的有Reachability.m和 Reachability.h這兩個類,下面會分開介紹這兩個的使用方法。

使用AF請求網絡:

在AppDelegate.h里面添加類方法:

+ (void)netWorkStatus;//獲取網絡狀態

在.m里面

#import "AppDelegate.h"

import "ViewController.h"

import "AFNetworkReachabilityManager.h"//af里面監聽網絡狀態的類

import "FileManager.h"//單利模型,用來記錄當前的網絡狀態

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions {

    ViewController view = [[ViewController alloc] init];     UINavigationController nav = [[UINavigationController alloc] initWithRootViewController:view];     self.window.rootViewController = nav;          //調用網絡狀態     [AppDelegate netWorkStatus];          return YES; }

+ (void)netWorkStatus {     /*      AFNetworkReachabilityStatusUnknown          = -1,  // 未知      AFNetworkReachabilityStatusNotReachable     = 0,   // 無連接      AFNetworkReachabilityStatusReachableViaWWAN = 1,   // 3G 花錢      AFNetworkReachabilityStatusReachableViaWiFi = 2,   // WiFi      /          // 如果要檢測網絡狀態的變化,必須用檢測管理器的單例的startMonitoring     [[AFNetworkReachabilityManager sharedManager] startMonitoring];          // 檢測網絡連接的單例,網絡變化時的回調方法     [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {                  //這是單利+模型,用來記錄網絡狀態         FileManager *maa = [FileManager shareFileManager];         maa.netState = status;         //        NSLog(@"-----網絡狀態----%ld---%d", status,maa.netState);     }]; }</pre>

創建一個.h文件命名為Singleton

//
//  Singleton.h
//  SingletonModel
//
//  Created by 琳小兮 on 15/5/21.
//  Copyright (c) 2015年 琳小兮. All rights reserved.
//

//因為方法名 shared"ClassName"是連在一起的,為了讓宏能夠正確替換掉簽名中的“ClassName”需要在前面加上 ## //當宏的定義超過一行時,在末尾加上“\”表示下一行也在宏定義范圍內。注意最后一行不需要加"\”。

//使用方法:(單利配合模型使用很方便) //在.h里面(//公開的訪問單利對象的方法singleton_interface(MyModel)) //在.m里面(singleton_implementation(MyModel))

define singleton_Interface(class)  + (class *)share##class;

define singleton_implemetntion(class)\

static class  instance = nil;\ + (class )share##class\ {\ if (!instance) {\ instance = [[class alloc]init];\ }\ return instance;\ }\ + (class )allocWithZone:(struct _NSZone )zone\ {\ static dispatch_once_t onece;\ dispatch_once(&onece, ^{\ instance = [super allocWithZone:zone];\ });\ return instance;\ }</pre>

然后創建模型,命名為FileManager  

在FileManager.h里面

#import <Foundation/Foundation.h>

import "Singleton.h"

@interface FileManager :NSObject

singleton_Interface(FileManager)

@property (nonatomic,assign) int netState;

@end</pre>

在FileManager.m里面

#import "FileManager.h"

@implementation FileManager

singleton_implemetntion(FileManager)

@end</pre>


如果是用的ASI的話:

在AppDelegate.h里面導入頭文件:

#import "Reachability.h"

添加類方法:

+(BOOL) isConnectionAvailable;//判斷是否有網絡

在.m里面

+(BOOL) isConnectionAvailable{
    
    BOOL isExistenceNetwork = YES;
    
    Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"];
    
    NSParameterAssert([reach isKindOfClass:[Reachability class]]);
    
    NetworkStatus stats = [reach currentReachabilityStatus];

    if (stats == NotReachable)         //沒有網絡         isExistenceNetwork = NO;     else if (stats == ReachableVia3G)         isExistenceNetwork = YES;     else if (stats == ReachableVia2G)         isExistenceNetwork = YES;     else if (stats == ReachableViaWiFi)         isExistenceNetwork = YES;          if (!isExistenceNetwork) {                  return NO;     }          return isExistenceNetwork; }</pre>

也可以用上面那種方式,利用單利+模型,來記錄當前網絡的具體狀態!

 本文由用戶 ngmm 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!