检查iPhone上的互联网连接并监控更改

时间:2011-12-31 19:08:03

标签: ios connection reachability

我在this answer之后实施了可达性课程。 我有两个不同的问题,希望对你有帮助......

我已将notifier放在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];
    }
}

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

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

第二个问题:如果连接状态发生变化(即从无到有),通知人员不会就此建议

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

先谢谢你,新年快乐, yassa

1 个答案:

答案 0 :(得分:0)

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

修改
我不确定这是否有效,因为我现在没有xcode:

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

如果您的代码仍然与the answer you linked相同,则只需在[self checkNetworkStatus:nil]viewDidLoad中致电viewDidAppear,然后再检查internetActive标记