Почему мое предупреждение отображается дважды? - PullRequest
2 голосов
/ 14 апреля 2011

в моем приложении я проверяю текущее состояние подключения к моему веб-сайту и состояние сети при запуске приложения:

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

internetReach = [[Reachability reachabilityForInternetConnection] retain];
[internetReach startNotifier];

hostReach = [[Reachability reachabilityWithHostName:@"www.google.de"] 
              retain];
[hostReach startNotifier];

[self updateInterfaceWithReachability:internetReach];
[self updateInterfaceWithReachability:hostReach];

//....

-(void)reachabilityChanged: (NSNotification* )note{
    Reachability* curReach = [note object];
    NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
    [self updateInterfaceWithReachability: curReach];
}

В моем updateInterfaceWithReachability я хочу показать предупреждение, если подключение к веб-сайту не можетбыть установленным.

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

if(curReach == hostReach){
        NetworkStatus netStatus = [curReach currentReachabilityStatus];

        if(netStatus != NotReachable){
            statusLabel.text = @"connected";
            [self setStatusColorGreen];
        }else{
            if(![internetReach connectionRequired]){
                statusLabel.text = @"not connected";
                compose.enabled = NO;
                [self doSMSFAlert];
                [self setStatusColorRed];
            }
        }
    }

Есть идеи?1011 * РЕДАКТИРОВАТЬ: я заметил, что теперь у меня есть рабочий хост, предупреждение тоже отображается, но не должно.Однако статус «подключен»

Ответы [ 2 ]

3 голосов
/ 14 апреля 2011

Потому что вы делаете два уведомления о доступности.Ваш первый для Интернета в целом.Второй для конкретного хоста.Почему бы вам не сделать только Reachability хоста?Таким образом, вы получите только одно предупреждение.

1 голос
/ 14 апреля 2011

Вы отвечаете на событие уведомления.Событие может быть доставлено столько раз, сколько изменяется статус, и вы должны знать, ответили ли вы уже или отвечаете на подобное изменение статуса.Некоторые параметры сохраняют логическое значение или проверяют, включено ли в данный момент представление оповещения, прежде чем пытаться отобразить другое.

...