本来没有这个文章的,只是最近遇到这样的一个问题:一直都是使用官方的网络检测代码(Reachability库),没有问题。只是最近在ios5下,在程序启动的时候需要检测网络,但是发布证书下的release版本下检测网络就直接退出。
先枚举三种网络检测形式:
1。直接使用官方库。
.h文件
#import "Reachability.h"
包含SystemConfiguration.framework
.m文件
//YES: 有效网络 NO:无网络
- (BOOL)CheckNetWork {
Reachability *r = [Reachability reachabilityWithHostName:@"www.apple.com"];
switch ([r currentReachabilityStatus]) {
case NotReachable: {
NSLog(@"没有网络连接");
}
return NO;
break;
case ReachableViaWWAN:
NSLog(@"使用3G网络");
return YES;
break;
case ReachableViaWiFi:
NSLog(@"使用WiFi网络");
return YES;
break;
}
return NO;
}
2。1的另一种表示形式:(采用通知的形式)
.h文件
#import "Reachability.h"
包含SystemConfiguration.framework
Reachability* hostReach;
.m文件
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(checkNetWork:)
name: kReachabilityChangedNotification
object: nil];
hostReach = [[Reachability reachabilityWithHostName:@"http://www.baidu.com/"] retain];
[hostReach startNotifier];
}
- (void)checkNetWork:(NSNotification *)note {
Reachability* curReach = [note object];
NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
NetworkStatus status = [curReach currentReachabilityStatus];
if (status == NotReachable) {
无网络
}
else {
有网络
}
[hostReach stopNotifier];
}
3。阻塞式网络检测(适用于程序启动的时候,必须检测到网络才继续使用的情况)
.m文件
#define kCheckNet @“NetWork”
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(checkNetWork:)
name:kCheckNet
object:nil];
[self performSelector:@selector(delayCheckNetWork) withObject:nil afterDelay:0.5]; //为了刷新界面用
}
- (void)delayCheckNetWork {
[[NSNotificationCenter defaultCenter] postNotificationName:kCheckNet object:nil];
}
- (BOOL)MyNetCheck {
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com/"];
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10];
NSHTTPURLResponse *response;
[NSURLConnection sendSynchronousRequest:request returningResponse: &response error: nil];
if (response == nil) {
return NO;
}
return YES;
}
- (void)checkNetWork:(NSNotification *)note {
if (![self MyNetCheck]) {
//无网络
}
else {
//有网络
}
}