проблемы с доступностью iphone

Моему приложению требуется подключение к Интернету, поэтому в ApplicationDelegate applicationDidFinishLaunching я запускаю следующее:

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil];

hostReach = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain];
[hostReach startNotifer];
[self updateInterfaceWithReachability: hostReach];

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

2010-02-04 14:25:48.004 myApp[201:207] Reachability Flag Status: -- ------- networkStatusForFlags
2010-02-04 14:25:48.240 myApp[201:207] STATUS: Access Not Available
2010-02-04 14:25:48.499 myApp[201:207] Reachability Flag Status: -- ------- networkStatusForFlags
2010-02-04 14:25:48.517 myApp[201:207] STATUS: Access Not Available

Это хорошо, что это работает, но у меня есть предупреждающее сообщение, чтобы уведомить пользователя об отсутствии соединения, и оно появляется дважды...

Почему уведомитель о достижимости срабатывает два раза?


person rson    schedule 04.02.2010    source источник


Ответы (1)


Не знаю, почему он появляется дважды. Вы пробовали закомментировать вызов startNotifier? Он может выполнить первоначальную проверку в методе reachabilityWithHostName:.

Это может быть случай, когда обходной путь является наиболее подходящим решением, например:

static bool userNotifiedOfReachability = NO;

...

- (void)updateInterfaceWithReachability:(Reachbility *)reachability {
    if (!userNotifiedOfReachability) {
        // Notify User

        ...

        userNotifiedOfReachability = YES;
    }
}

Это было бы уместно для сообщения «пожалуйста, попробуйте запустить приложение позже».

person Frank Schmitt    schedule 04.02.2010
comment
Это сработало... почти. Это всегда второй раз, который подтверждает, установлено ли соединение, это проверка и игнорирование второго раза. У меня все получилось, спасибо за подсказку! - person rson; 05.02.2010