三种网络检测举例

本来没有这个文章的,只是最近遇到这样的一个问题:一直都是使用官方的网络检测代码(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 {
       //有网络
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值