Проверьте интернет-соединение на iPhone и следите за изменениями - PullRequest
0 голосов
/ 31 декабря 2011

Я реализовал классы Reachability после этого ответа . У меня две разные проблемы, и я надеюсь на вашу помощь ...

Я поместил уведомитель в свой 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];
}

и я проверяю подключение к Интернету в моем представлении

(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];
    }
}

ПЕРВАЯ ПРОБЛЕМА: КАК ПРОВЕРИТЬ ПОДКЛЮЧЕНИЕ К ИНТЕРНЕТУ В ПЕРВЫЙ РАЗ

При первом доступе к представлению отображается предупреждение, даже если подключение к Интернету в порядке. Это, я думаю, потому что уведомитель еще не получил уведомление о соединении. Как с этим справиться?

ВТОРАЯ ПРОБЛЕМА: ЕСЛИ ИЗМЕНЯЕТСЯ СОСТОЯНИЕ СОЕДИНЕНИЯ (т. Е. ОТ ОТСУТСТВУЕТ В НАСТОЯЩЕЕ ВРЕМЯ), УВЕДОМИТЕЛЬ НЕ СОВЕТУЕТ ОБ ЭТОМ

Если я запускаю приложение без подключения к интернету, предупреждение отображается правильно. Но если Интернет снова доступен, каждый раз, когда я получаю доступ к представлению, предупреждение продолжает отображаться, поскольку изменение доступности Интернета не перехватывается. Я думаю, что это связано с выполнением уведомителя в том же потоке. Как реализовать эту проверку соединения, чтобы перехватить также изменения статуса соединения?

Заранее спасибо и с Новым годом, Яс

1 Ответ

0 голосов
/ 31 декабря 2011

Ваше подозрение правильное, очень обычно для методов viewDidLoad и viewDidAppear вызываться в одном цикле выполнения, что означает, что вы не получите никакого уведомления до viewDidAppear.

редактировать
Я не уверен, что это сработает, потому что у меня сейчас нет xcode:

Попробуйте использовать [internetReachable currentReachabilityStatus] и [hostReachable currentReachabilityStatus], чтобы проверить текущий статус, прежде чем получать какие-либо уведомления.

Если ваш код все еще совпадает с ответом, который вы связали , просто наберите [self checkNetworkStatus:nil] в своем viewDidLoad или viewDidAppear, прежде чем проверять флаг internetActive

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...