Задать вопрос
@MagoVinch

Как обработать ошибку, когда сайт, к которому обращается программа, недоступен?

Работаю над программой под iOS, которая использует данные с конкретного сайта. И бывает, что сайт отрубается, как будто и ввели несуществующий домен. Хочу обработать как-то эту ошибку, чтобы программа аварийно не завершалась. Посоветуйте что-нибудь!

Проверяю соединение вот так, но он почему-то не срабатывает.

Reachability* appleReachability = [Reachability reachabilityWithHostName: @"www.sitename.ru"];
        NetworkStatus status = appleReachability.currentReachabilityStatus;
        
        switch (status) {
            case NotReachable:{
                self.noConnect = [[UIAlertView alloc] initWithTitle:@"Хост недоступен" message:@"Возможно отсутствует подключение к сети Интернет, проверьте соединение и повторите попытку снова." delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
                [self.noConnect show];
                // хост недоступен
            }
                
                break;
            case ReachableViaWiFi:
                [self loadData];
                
                // доступен через WiFi
                break;
            case ReachableViaWWAN:
                [self loadData];
                
                // доступен через 3G или EDGE
                break;
        }
        
    }
  • Вопрос задан
  • 2464 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Flanker_4
@Flanker_4
Возможно Вы забыли вызвать startNotifier
т.е. код должен выглядеть так
_hostReachable = [Reachability reachabilityWithHostName: host];
 [_hostReachable startNotifier];


Ну и плюс ко всему, он там бросает нотификацию kReachabilityChangedNotification
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil];

на которую следует ориентироваться как-то так

-(void) checkNetworkStatus:(NSNotification *)notice
{
    //Проверяем есть ли доступ в интернет.
    NetworkStatus internetStatus = [_internetReachable currentReachabilityStatus];
    if (internetStatus==NotReachable) {
       ....
    }
    ...
 }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
SolidlSnake
@SolidlSnake
Ваш дружелюбный сосед
А почему бы для разработки не сделать тестовые данные на локальной машине?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы