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); }]; }</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>
也可以用上面那種方式,利用單利+模型,來記錄當前網絡的具體狀態!