iOS检测是否有网络连接
2018-07-20 来源:open-open
如果你的工程里面是用的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; }
也可以用上面那种方式,利用单利+模型,来记录当前网络的具体状态!
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
上一篇: Spring使用memcached
最新资讯
热门推荐