【问题标题】:No Internet Connection Handling on UIWebView and NSURLRequest [duplicate]UIWebView 和 NSURLRequest 上没有 Internet 连接处理 [重复]
【发布时间】:2011-08-13 16:04:31
【问题描述】:

我有一个完全基于网络的应用程序,需要互联网连接才能浏览。基本上是通过 UIWebView 查看的网站。

我需要能够告诉用户,如果他们没有互联网连接,则无法加载任何页面。有没有一种简单的方法可以做到这一点。也许检查 NSURLRequest 是否失败?

干杯

【问题讨论】:

    标签: objective-c ipad uiwebview nsurlrequest


    【解决方案1】:

    我会查看 Apple 的 Reachability 示例代码以可靠地实现这一点。这种方法的一个优点是,即使用户实际上并未点击 Web 视图中的任何链接,您也可以通知用户当前的网络状态。

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

        1>将 SystemConfiguration.framework 添加到您的项目中

        2>在您的 Connection.h 文件中导入以下 .h 文件

        #import <sys/socket.h>
        #import <netinet/in.h>
        #import <SystemConfiguration/SystemConfiguration.h>
        

        3>在 Connection.h 文件中声明以下类方法

        +(BOOL)hasConnectivity;
        

        4>在你的 Connection.m 文件中定义这个方法

        +(BOOL)hasConnectivity {
        
        struct sockaddr_in zeroAddress;
        bzero(&zeroAddress, sizeof(zeroAddress));
        zeroAddress.sin_len = sizeof(zeroAddress);
        zeroAddress.sin_family = AF_INET;
        
        SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr*)&zeroAddress);
        if(reachability != NULL) {
            //NetworkStatus retVal = NotReachable;
            SCNetworkReachabilityFlags flags;
            if (SCNetworkReachabilityGetFlags(reachability, &flags)) {
                if ((flags & kSCNetworkReachabilityFlagsReachable) == 0)
                {
                    // if target host is not reachable
                    return NO;
                }
        
                if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0)
                {
                    // if target host is reachable and no connection is required
                    //  then we'll assume (for now) that your on Wi-Fi
                    return YES;
                }
        
        
                if ((((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) ||
                     (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0))
                {
                    // ... and the connection is on-demand (or on-traffic) if the
                    //     calling application is using the CFSocketStream or higher APIs
        
                    if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0)
                    {
                        // ... and no [user] intervention is needed
                        return YES;
                    }
                }
        
                if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)
                {
                    // ... but WWAN connections are OK if the calling application
                    //     is using the CFNetwork (CFSocketStream?) APIs.
                    return YES;
                }
            }
        }
        
        return NO;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-30
          • 2016-10-16
          • 1970-01-01
          • 2016-11-10
          • 1970-01-01
          相关资源
          最近更新 更多