1.首先在AppDelegate.h添加头文件"Reachability.h",导入框架SystemConfiguration.framework。Reachability自己网上找。
2. 在AppDelegate.m中这样实现:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//开启网络状况的监听
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil];
hostReach = [Reachability reachabilityForInternetConnection];
// hostReach = [Reachability reachabilityWithHostName:@"www.apple.com"];//可以以多种形式初始化
[hostReach startNotifier]; //开始监听,会启动一个run loop
[self updateInterfaceWithReachability: hostReach];
}
//监听到网络状态改变
- (void) reachabilityChanged: (NSNotification* )note
{
Reachability* curReach = [note object];
NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
[self updateInterfaceWithReachability: curReach];
}
//处理连接改变后的情况
- (void) updateInterfaceWithReachability: (Reachability*) curReach
{
//对连接改变做出响应的处理动作。
NetworkStatus status = [curReach currentReachabilityStatus];
if(status == ReachableViaWWAN)
{
printf("\n3g/2G\n");
}
else if(status == ReachableViaWiFi)
{
printf("\nwifi\n");
}else
{
printf("\n无网络\n");
}
}
当网络连接状态发生改变的时候会发出通知,hostReach = [Reachability reachabilityWithHostName:@"www.apple.com"];
这么初始化会出现一个问题,就是网络改变的时候通知会走两次,可以改成这样初始化:hostReach = [Reachability reachabilityForInternetConnection];调试用真机测试,模拟器可能会出现不准确的情况。这是苹果提供的网络判断下面说一下AFNetworking的:- (BOOL)checkNetworkStatus {
__block BOOL isNetworkUse = YES;
AFNetworkReachabilityManager *reachabilityManager = [AFNetworkReachabilityManager sharedManager];
[reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
if (status == AFNetworkReachabilityStatusUnknown) {
isNetworkUse = YES;
} else if (status == AFNetworkReachabilityStatusReachableViaWiFi){
isNetworkUse = YES;
} else if (status == AFNetworkReachabilityStatusReachableViaWWAN){
isNetworkUse = YES;
} else if (status == AFNetworkReachabilityStatusNotReachable){
// 网络异常操作
isNetworkUse = NO;
XLLog(@"网络异常,请检查网络是否可用!");
}
}];
[reachabilityManager startMonitoring];
return isNetworkUse;
}
在AppDelegate 中导入AF的头文件 ,在didFinishLaunchingWithOptions 方法中调用就可以了,
记得[reachabilityManager startMonitoring];用法很简单不多说了以上所述是小编给大家介绍的iOS 检测网络状态的两种方法,
希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。