检查 iPhone 上的互联网连接并监控变化

Posted

技术标签:

【中文标题】检查 iPhone 上的互联网连接并监控变化【英文标题】:Check internet connection on iPhone and monitor changes 【发布时间】:2011-12-31 19:08:02 【问题描述】:

我已经按照this answer 实现了可达性类。 我有两个不同的问题,希望对您有所帮助...

我已将通知程序放在我的 viewDidLoad 中:

(void)viewDidLoad

    [super viewDidLoad];
    // check for internet connection
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil];

    internetReachable = [Reachability reachabilityForInternetConnection];
    [internetReachable startNotifier];

    // check if a pathway to a random host exists
    hostReachable = [Reachability reachabilityWithHostName: @"www.apple.com"];
    [hostReachable startNotifier];

然后我在 viewDidAppear 中检查互联网连接:

(void)viewDidAppear:(BOOL)animated

    [super viewDidAppear:animated];

    //check connection when access to the view
    if (internetActive)
    
        [self loadData];
    
    else
    
        UIAlertView * errorAlert = [[UIAlertView alloc] initWithTitle:@"Error loading content" message:@"Internet connection not available" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [errorAlert show];
    

第一个问题:第一次如何检查互联网连接

我第一次访问视图时,会显示警报,如果互联网连接正常也是如此。我认为这是因为通知者尚未收到有关连接的通知。如何管理?

第二个问题:如果连接状态发生变化(即从不存在变为存在),通知者不会就此提供建议

如果我在没有互联网连接的情况下启动应用程序,警报会正确显示。但是,如果互联网再次可用,则每次我访问视图时都会继续显示警报,因为不会拦截互联网可用性的变化。我认为这是由于在同一线程上执行通知程序。如何实现此连接检查以拦截连接状态变化?

提前致谢,新年快乐, 亚萨

【问题讨论】:

你应该看看Reachability without the suck。 【参考方案1】:

您的怀疑是正确的,viewDidLoadviewDidAppear 方法在同一个运行循环中被调用是很常见的,这意味着您在viewDidAppear 之前不会收到任何通知。

编辑 我不确定这是否可行,因为我现在没有 xcode:

在收到任何通知之前,请尝试使用[internetReachable currentReachabilityStatus][hostReachable currentReachabilityStatus] 检查当前状态。

如果您的代码仍然与 the answer you linked 相同,只需在您的 viewDidLoadviewDidAppear 中调用 [self checkNetworkStatus:nil],然后再检查 internetActive 标志

【讨论】:

非常感谢您的提示!!!更改 - (void)viewDidAppear:(BOOL)animated [super viewDidAppear:animated]; //check connection when access to the view //if (internetActive) if ([internetReachable currentReachabilityStatus]) 对我来说效果很好!!!

以上是关于检查 iPhone 上的互联网连接并监控变化的主要内容,如果未能解决你的问题,请参考以下文章

检查iphone中的网络可达性后应用程序崩溃?

检查 API 29 上的互联网连接

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

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

java 检查Android上的互联网连接

不断检查 Flutter 应用程序上的互联网断开连接