2013-07-02 4 views
0

У меня есть этот код в моем приложении:Что означает Reachability в iOS?

-(void)reachAlert:(Reachability*)currentReach { 

    if(currentReach == hostReach) { 
     //Make sure we have internet connectivity 
     //UIAlertView *internetAlert = [[UIAlertView alloc] initWithTitle:@"Excellent" message:@"Host Reached" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil]; 
     //[internetAlert show]; 
     [[SDSyncEngine sharedEngine] startSync]; 


    } 
    /** 
    if(currentReach == internetReach) { 
    //Make sure we have internet connectivity 
    UIAlertView *internetAlert = [[UIAlertView alloc] initWithTitle:@"Good" 
    message:@"Internet" 
    delegate:self 
    cancelButtonTitle:@"Cancel" 
    otherButtonTitles:@"Ok", nil]; 
    [internetAlert show]; 
    } 
    **/ 
    if(currentReach == wifiReach) { 
     //Make sure we have internet connectivity 
     UIAlertView *internetAlert = [[UIAlertView alloc] initWithTitle:@"Bad News" 
                   message:@"Only wifi" 
                   delegate:self 
                 cancelButtonTitle:@"Cancel" 
                 otherButtonTitles:@"Ok", nil]; 
     [internetAlert show]; 
    } 
    [TestFlight passCheckpoint:@"reachAlert"]; 


} 

Как вы можете видеть, что я закомментирована internetReach, потому что я понял, Что более важно то, что мы имеем hostReach. Таким образом, по умолчанию мы должны иметь доступ в Интернет. Я также прокомментировал оповещение hostReach только потому, что только хочу предупредить пользователя в случае отсутствия подключения к Интернету.

Однако при тестировании приложения на Wi-Fi я получаю сообщение о плохих новостях только по Wi-Fi. Почему он не предупреждает hostReach?

ответ

1

достижимости действительно не идеален для отображения сообщений об ошибках. В идеале вы должны показать сообщение об ошибке, когда соединение, которое вы пытаетесь использовать, не работает, например NSURLConnection возвращает ошибку -1009.

+0

ОК, я получил это ... так что в основном просто всплывающее предупреждение в случае сбоя соединения, не так ли? – marciokoko

+0

Да, ошибка 1009 означает, что вы не можете подключиться. Конечно, вы могли бы получить другие ошибки, поэтому вам следует действовать соответствующим образом. –

0

Не знаю, если это помогает, но я нашел это где-то и решил, что это было гораздо лучшее решение проблемы - хотя кто-то, скорее всего, об этом спорить:

- (void) verifyInternetConnection 
{ 
    NSURL *scriptUrl = [NSURL URLWithString:@"http://youtube.com"]; 
    NSData *data = [NSData dataWithContentsOfURL:scriptUrl]; 
    if (!data) 
    { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Internet Required" message:@"This device is not currently connected to the Internet" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
     alert.tag = 1; 
     [alert show]; 
    } 
} 
+0

Это хороший простой подход, но я хочу указать (возможно, очень очевидно), что вы не должны использовать URL-адрес с большим контентом, например, youtube. Вместо этого создайте URL-адрес, который будет отвечать назад с минимальным количеством известных данных. – Hippocrates

+0

@ Гиппократ ... хороший совет! :) – marciokoko

+0

@RegularExpression .... thx вам тоже! – marciokoko