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

问题描述:

我已在this answer之后实施了可达性类别。 我有两个不同的问题,我希望对你有所帮助......检查iPhone上的互联网连接并监视更改

我已经把通知我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]; 
    } 
} 

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

我第一次ACC如果网络连接正常,则显示警报。我认为,这是因为通知程序尚未收到关于连接的通知。如何管理这个?

第二个问题:如果连接状态改变(即从不存在至今),通知并没有征询关于此

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

在此先感谢和新年快乐, yassa

+0

之前,您应该看一看[可达没有吸(https://github.com/ nickpaulson/NPReachability)。 – samvermette 2011-12-31 19:14:55

你suspission是正确的,这是非常usuall的viewDidLoadviewDidAppear方法在同一运行循环中调用,这意味着您将不会收到任何viewDidAppear之前的通知。

编辑
我不知道这是否会工作,因为我没有在这里的Xcode现在:

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

如果你的代码仍然是一样的the answer you linked只需拨打[self checkNetworkStatus:nil]viewDidLoadviewDidAppear检查internetActive标志

+0

非常感谢您的提示!改变' - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; //检查连接时访问视图 //如果(internetActive) 如果([internetReachable currentReachabilityStatus]){ ' 为我工作得很好! – yassassin 2012-01-01 12:39:34