| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
ngmm
10年前发布

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);      }];  }

创建一个.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;\  }

然后创建模型,命名为FileManager  

在FileManager.h里面

#import <Foundation/Foundation.h>    #import "Singleton.h"    @interface FileManager :NSObject    singleton_Interface(FileManager)    @property (nonatomic,assign) int netState;    @end

在FileManager.m里面

#import "FileManager.h"    @implementation FileManager    singleton_implemetntion(FileManager)    @end


如果是用的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;  }

也可以用上面那种方式,利用单利+模型,来记录当前网络的具体状态!