Несколько предупреждений iPhone, вызываемых после проверки сетевого подключения - PullRequest
0 голосов
/ 11 июня 2011

В поисках ответа некоторые заметили проблему, но никто не решил ее.Я просто хочу, чтобы пользователь был уведомлен, если произошло изменение сетевого подключения (то есть потеря сети).Приведенный ниже код работает, но я получаю несколько предупреждений, обычно 3. Я понимаю причину, по которой это может произойти из-за точности внутренних вызовов, но у меня не может быть только одного отображения предупреждений, и это все.Я пытался использовать BOOL, чтобы определить, отображается ли уже предупреждение (alerthowing), но это все равно не помогает.Спасибо за ваши мысли.

- (void)applicationDidBecomeActive:(UIApplication *)application {
    ////NSLog(@"DidBecomeActive");

    [self performSelector:@selector(getNetworkConnection) withObject:nil afterDelay:5.0];

}


-(void)getNetworkConnection
{
    Reachability *r = [Reachability reachabilityWithHostName:@"www.google.com"];

    NetworkStatus internetStatus = [r currentReachabilityStatus];

        if ((internetStatus != ReachableViaWiFi) && (internetStatus != ReachableViaWWAN))
        {
            if (!self.alertShowing) {
            UIAlertView *myAlert = [[[UIAlertView alloc] initWithTitle:@"No Internet Connection" message:@"This app require an internet connection via WiFi or cellular network to work." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil] autorelease];
            self.alertShowing = YES;
            [myAlert show];
            }
        }       
}

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
    self.alertShowing = NO;
}

1 Ответ

1 голос
/ 25 января 2012
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNetworkChange:) name:kReachabilityChangedNotification object:nil];

Вышеупомянутая строка кода должна вызываться только один раз для всего приложения.
Если вы вызываете эту строку кода в функции, которая вызывается много раз, уведомление также показывает много предупреждений.

Поэтому я рекомендую вам создать одноэлементный класс, который будет работать во всем приложении, и вызвать указанную выше строку кода в области, где создается объект для одноэлементного класса.

Примечание: - вышестрока кода должна вызываться только один раз для всего приложения

...