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

Posted

技术标签:

【中文标题】检查互联网连接 iOS - Obj-C【英文标题】:Check internet connection iOS - Obj-C 【发布时间】:2015-06-20 19:38:42 【问题描述】:

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

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;
    

它可以工作,但现在我想做的是,如果这是没有互联网的最后一种情况,我会显示一个视图告诉用户,然后在后台,我想检查互联网何时恢复如果它确实回来了,然后像我一样删除视图。

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

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

感谢您的帮助。

编辑

这是我第一次从 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;
        
    

当我重新打开互联网时它可以工作,我得到了正确的案例,但是当它持续运行以检查互联网何时开启时,视图没有出现?为什么不出现?

【问题讨论】:

@Aanabidden 感谢您的回复,您能再补充一点吗,我不太清楚如何使用这些? 它没有出现,因为您可以取消隐藏视图直到它被隐藏。 @Aanabidden 抱歉这句话没有意义 ^你是calling函数,抱歉我错过了这个词。 【参考方案1】:

后台入口可以使用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];

【讨论】:

好的,但我认为我解释得不太正确,或者你没有完全明白我的要求。我不只是想重新检查应用程序何时再次激活(对吗?)。我加载我的主屏幕并且没有互联网我显示noInternetView,当它显示时我想检查用户是否重新连接以及他们是否隐藏了视图?有道理?谢谢

以上是关于检查互联网连接 iOS - Obj-C的主要内容,如果未能解决你的问题,请参考以下文章

检查互联网连接 - iOS 逻辑 [重复]

如何在 iOS 设备上检查互联网连接? [复制]

检查 iOS 上的互联网连接会引发错误

在检查互联网连接期间 iOS 应用程序冻结

尝试使用 Alamofire 检查 iOS 设备上的互联网连接

无法在 iOS 9 中检查互联网连接