Как решить проблему интернет-проверки в iPhone? - PullRequest
1 голос
/ 10 июля 2011

Я работаю над приложением, и мне нужно проверить подключение к интернету. Я использую два файла Reachability.h и Reachability.m. Теперь я должен показать предупреждение, когда интернет не работает.

Но когда мой обозреватель проверяет интернет, он показывает предупреждение более одного раза. и иногда показывает предупреждение более 9-10 раз. мой код здесь:

в .h файле

Reachability* internetReachable;
    Reachability* hostReachable;
    NetworkStatus internetStatus;

в .m файле

        internetReachable = [[Reachability reachabilityForInternetConnection] retain];
        [internetReachable startNotifier];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil];
        hostReachable = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain];
        [hostReachable startNotifier];



- (void) checkNetworkStatus:(NSNotification *)notice    
     {
        internetStatus = [internetReachable currentReachabilityStatus];

        if (internetStatus != NotReachable){
            NSLog(@"internet is on");

        }
        else {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error!" message:@"Server not connected or down!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
            [alert release];
            internetCount++;
        }           
}

этот код находится в делегате, и аналогично я использую этот код в других классах, где когда-либо мне нужно проверять интернет

PLZ Help

1 Ответ

2 голосов
/ 10 июля 2011

Я не использую Reachability, потому что у меня были такие же проблемы, как у вас, поэтому я создал свою собственную реализацию.Просто импортируйте файл заголовка ниже и затем позвоните [self networkIsReachable], чтобы проверить подключение к Интернету.

    #import <netinet/in.h>
    - (BOOL)networkIsReachable 
    {
        struct sockaddr_in zeroAddress;
        bzero(&zeroAddress, sizeof(zeroAddress));
        zeroAddress.sin_len = sizeof(zeroAddress);
        zeroAddress.sin_family = AF_INET;

        SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
        SCNetworkReachabilityFlags flags;
        BOOL gotFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
        CFRelease(defaultRouteReachability);
        if (!gotFlags) {
            return NO;
        }
        BOOL isReachable = flags & kSCNetworkReachabilityFlagsReachable;

        BOOL noConnectionRequired = !(flags & kSCNetworkReachabilityFlagsConnectionRequired);
        if ((flags & kSCNetworkReachabilityFlagsIsWWAN)) {
            noConnectionRequired = YES;
        }

        return (isReachable && noConnectionRequired) ? YES : NO;
    }
...