检查互联网连接iOS - Obj-C

时间:2015-06-20 19:38:43

标签: ios wifi reachability internet-connection

我正在尝试检查我的应用是否有互联网连接,我可以使用苹果可达性,这样做

internetReach = [Reachability reachabilityForInternetConnection];
[internetReach startNotifier];
NetworkStatus netStatus = [internetReach currentReachabilityStatus];
witch (netStatus){
    case ReachableViaWWAN:{
        isReachable = YES;
        NSLog(@"4g");
        noInternetView.hidden = YES;
        break;
    }
    case ReachableViaWiFi:{
        isReachable = YES;
        noInternetView.hidden = YES;
        NSLog(@"wifi");
        break;
    }
    case NotReachable:{
        NSLog(@"NONE");
        noInternetView = [[CheckInternetView alloc] initWithFrame:self.view.bounds];
        [self.view addSubview:noInternetView];
        isReachable = NO;
        break;
    }
}

它有效,但现在我要做的是,如果它是没有互联网的最后一个案例,我会显示告诉用户的视图,然后在后台,我想检查互联网何时返回如果它确实回来,那就像我一样删除视图。

我尝试将上面的代码放在一个方法中,如果没有互联网,那么再次调用该方法,但之后视图没有出现,如果没有运行检查,它只是不断地反复运行该方法。

因此,如果没有互联网,我如何在后台运行检查以查看它何时返回,然后隐藏视图?

感谢advace的帮助。

修改

这是我首次从viewDidLoad

调用的方法
-(void)checkInternet {

    internetReach = [Reachability reachabilityForInternetConnection];
    [internetReach startNotifier];
    NetworkStatus netStatus = [internetReach currentReachabilityStatus];

    switch (netStatus){
        case ReachableViaWWAN:{
            isReachable = YES;
            NSLog(@"4g");
            noInternetView.hidden = YES;
            break;
        }
        case ReachableViaWiFi:{
            isReachable = YES;
            noInternetView.hidden = YES;
            NSLog(@"wifi");
            break;
        }
        case NotReachable:{

            NSLog(@"NONE");
            noInternetView = [[CheckInternetView alloc] initWithFrame:self.view.bounds];
            [self.view addSubview:noInternetView];
            isReachable = NO;
            [self checkInternet];
            break;
        }
    }
}

当我重新打开互联网时,它可以正常工作,但是当它连续运行以检查互联网何时启动时,视图不会出现?为什么不出现?

1 个答案:

答案 0 :(得分:0)

对于后台输入,您可以使用applicationDidEnterForeground方法检查AppDelegate中的状态。

-(void)applicationDidEnterForeground:(UIApplication *)application {
    // call your method here to check internet status
    // lets say its
    [Network checkReachabilityStatus];
}

您可以在视图UIApplicationDidBecomeActiveNotification通知中使用来重新检查互联网状态并隐藏/显示视图

-(void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showHideInternetStatusView) name:UIApplicationDidBecomeActiveNotification object:nil];
}
-(void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil];
}