如果你的工程里面是用的AFNetworking请求网络数据的话,那么可以直接使用 AFNetworkReachabilityManager.h来判断网络状态!如果是用的ASI的话,里面自带的有Reachability.m和 Reachability.h这两个类,下面会分开介绍这两个的使用方法。
使用AF请求网络:
在AppDelegate.h里面添加类方法:
(void)netWorkStatus;//获取网络状态
在.m里面
代码语言:javascript复制#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>
也可以用上面那种方式,利用单利+模型,来记录当前网络的具体状态!