2011-04-27 47 views
11

我有一個完全基於Web的應用程序,需要互聯網連接來瀏覽。基本上是一個通過UIWebView瀏覽的網站。在UIWebView和NSURLRequest上沒有Internet連接處理

我需要能夠告訴用戶沒有網頁可以加載,如果他們沒有互聯網連接。有沒有一種簡單的方法可以做到這一點。也許檢查NSURLRequest是否失敗?

乾杯

回答

5

我想看看蘋果的Reachability示例代碼,可靠地實現這一點。這種方法的一個優點是,即使用戶沒有實際點擊Web視圖中的任何鏈接,您也可以通知用戶當前的網絡狀態。

0

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; 
} 
相關問題