首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何解决iPhone中的网络检测问题?

如何解决iPhone中的网络检测问题?
EN

Stack Overflow用户
提问于 2011-07-11 02:16:55
回答 1查看 1.5K关注 0票数 1

我正在开发一个应用程序,我必须检查互联网连接。我使用了两个文件Reacvicity.h和Reacvicity.m。现在,当互联网不工作时,我必须显示一个警报。

但是当我的观察者查看互联网时,它不止一次地显示警报视图。有时,它会显示9-10次以上的警报。我的代码如下:

在.h文件中

代码语言:javascript
运行
复制
Reachability* internetReachable;
    Reachability* hostReachable;
    NetworkStatus internetStatus;

在.m文件中

代码语言:javascript
运行
复制
        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++;
        }           
}

这段代码是在委托中编写的,类似地,我在其他类中也使用了这段代码,只要我需要检查internet

请帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-11 02:22:22

我不使用Reachability,因为我遇到了像您一样的问题,所以我创建了自己的实现。只需导入下面的头文件,然后调用[self networkIsReachable]来检查internet连接。

代码语言:javascript
运行
复制
    #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;
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6642953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档