iOS 检测网络状态的两种方法
一般有两种方式,都是第三方的框架,轮子嘛,能用就先用着,后面再优化。
一:Reachability
1.首先在AppDelegate.h添加头文件"Reachability.h",导入框架SystemConfiguration.frame。
2.在AppDelegate.m中这样实现:
-(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions{ //开启网络状况的监听 //来订阅实时的网络状态变化通知。导入Reachability.h头文件,然后注册一个对象来订阅网络状态变化的信息,网络状态变化的信息名称为kReachabilityChanged-Notification [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(reachabilityChanged:)name:kReachabilityChangedNotificationobject:nil]; //通过检查某个主机能否访问来判断当前网络是否可用: self.hostReach=[ReachabilityreachabilityWithHostName:@"www.baidu.com"]; //开始监听,会启动一个runloop [self.hostReachstartNotifier]; } -(void)reachabilityChanged:(NSNotification*)note{ Reachability*currReach=[noteobject]; NSParameterAssert([currReachisKindOfClass:[Reachabilityclass]]); //对连接改变做出响应处理动作 NetworkStatusstatus=[currReachcurrentReachabilityStatus]; //如果没有连接到网络就弹出提醒实况 self.isReachable=YES; if(status==NotReachable){ UIAlertView*alert=[[UIAlertViewalloc]initWithTitle:@"网络连接异常"message:nildelegate:nilcancelButtonTitle:@"确定"otherButtonTitles:nil]; [alertshow]; [alertrelease]; self.isReachable=NO; return; } if(status==kReachableViaWiFi||status==kReachableViaWWAN){ UIAlertView*alert=[[UIAlertViewalloc]initWithTitle:@"网络连接信息"message:@"网络连接正常"delegate:nilcancelButtonTitle:@"确定"otherButtonTitles:nil]; //[alertshow]; [alertrelease]; self.isReachable=YES; } }
然后在每个页面的viewWillAppear:加上:
-(void)viewWillAppear:(BOOL)animated{ [superviewWillAppear:YES]; AppDelegate*appDlg=(AppDelegate*)[[UIApplicationsharedApplication]delegate]; if(appDlg.isReachable){ NSLog(@"网络已连接");//执行网络正常时的代码 } else{ NSLog(@"网络连接异常");//执行网络异常时的代码 UIAlertView*alert=[[UIAlertViewalloc]initWithTitle:@"网络连接异常"message:nildelegate:nilcancelButtonTitle:@"确定"otherButtonTitles:nil]; [alertshow]; [alertrelease]; } }
这样就可以检查到在运行程序时网络突然的中断和连接。Reachability类实际上是苹果公司对SCNetworkReachabilityAPI的封装,这个API定义在SystemConfigure.framework库中。如果有其他特别的需求,也可以直接使用这个原生的SCNetworkReachability类。
二:AFNetworking监测
1.导入框架,和头文件#import<AFNetworkReachabilityManager.h>
2.代码:
-(void)afn{ //1.创建网络状态监测管理者 AFNetworkReachabilityManager*manger=[AFNetworkReachabilityManagersharedManager]; //开启监听,记得开启,不然不走block [mangerstartMonitoring]; //2.监听改变 [mangersetReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatusstatus){ /* AFNetworkReachabilityStatusUnknown=-1, AFNetworkReachabilityStatusNotReachable=0, AFNetworkReachabilityStatusReachableViaWWAN=1, AFNetworkReachabilityStatusReachableViaWiFi=2, */ switch(status){ caseAFNetworkReachabilityStatusUnknown: NSLog(@"未知"); break; caseAFNetworkReachabilityStatusNotReachable: NSLog(@"没有网络"); break; caseAFNetworkReachabilityStatusReachableViaWWAN: NSLog(@"3G|4G"); break; caseAFNetworkReachabilityStatusReachableViaWiFi: NSLog(@"WiFi"); break; default: break; } }]; }
以上所述是小编给大家介绍的iOS检测网络状态的两种方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!