当 UIWebView 没有互联网连接时实现 UIAlertView

Posted

技术标签:

【中文标题】当 UIWebView 没有互联网连接时实现 UIAlertView【英文标题】:Implement a UIAlertView when a UIWebView does not have an internet connection 【发布时间】:2014-06-09 04:33:55 【问题描述】:

我正在使用一些 UIWebViews 创建一个相当简单的基于选项卡的应用程序。为了通过 App Store Approval,如果没有网络连接,我需要实现一个错误。我是初学者,但我试过了,但什么也没发生。

-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error 

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                message:@"Can't connect. Please check your internet Connection"
                                               delegate:self
                                      cancelButtonTitle:@"OK"
                                      otherButtonTitles:nil];
[alert show];


我尝试过 Reachability,但它很复杂,我不确定如何将它实现到 UIAlertView 中。这段代码可以通过调整工作还是垃圾?

【问题讨论】:

在页面加载时关闭网络,它会显示警报.. 或者先关掉网络再运行你的App.. 我已经这样做了,广告不会加载任何警报。 webView:didFailLoadWithError: 的超时时间相当高,我相信大约是一分钟左右。你等了那么久吗? developer.apple.com/Library/ios/samplecode/Reachability/… 下载这段代码.. 运行看看它是如何工作的 【参考方案1】:

我建议你使用delegate methods of webView 并在 ViewController 中实现它。

webView的委托方法主要有3种。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error

- (void)webViewDidFinishLoad:(UIWebView *)webView

在 didFailLoadWithError 方法中,您可以使用 [错误代码] 来识别错误代码。您可以根据自己的要求使用其中任何一种。

// Error codes for CFURLConnection and CFURLProtocol
  kCFURLErrorUnknown = -998,
  kCFURLErrorCancelled = -999,
  kCFURLErrorBadURL = -1000,
  kCFURLErrorTimedOut = -1001,
  kCFURLErrorUnsupportedURL = -1002,
  kCFURLErrorCannotFindHost = -1003,
  kCFURLErrorCannotConnectToHost = -1004,
  kCFURLErrorNetworkConnectionLost = -1005,
  kCFURLErrorDNSLookupFailed = -1006,
  kCFURLErrorHTTPTooManyRedirects = -1007,
  kCFURLErrorResourceUnavailable = -1008,
  kCFURLErrorNotConnectedToInternet = -1009,

这些错误代码在 CFNetworkError.h 中可用。在我的应用程序中我使用过这种方式。

 if ([error code] == kCFURLErrorNotConnectedToInternet) 
        // if we can identify the error, we can present a more precise message to the user.
        UIAlertView *alertView=[[[UIAlertView alloc] initWithTitle:APP_NAME message:@"Sorry, there doesn’t seem to be an internet connection." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil]autorelease];
        [alertView show];
 

这对我来说很好。

【讨论】:

感谢您提供此代码列表;它将帮助我解决我想在这里采取的方法。非常感谢!【参考方案2】:

您为 UIWebView 分配委托的视图控制器; (在您设置 webview.delegate=self 的 viewcontroller 代码中),您需要将头文件 (.h) 提交给 UIWebViewDelegate 协议。只有你的方法:

-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error

将被触发。我猜你错过了这个,否则你的过程是正确的。 因此,将 UIWebViewDelegate 添加到您的 .h 文件中。

希望这会有所帮助。

【讨论】:

【参考方案3】:

您可以使用 ViewDidLoad 或 ViewWillAppear 的可达性代码检查网络连接。使用下面的链接下载它们

https://github.com/tonymillion/Reachability

    Reachability *reach = [Reachability reachabilityForInternetConnection];
    NetworkStatus netStatus = [reach currentReachabilityStatus];
    if (netStatus != NotReachable)
    
     NSLog(@"Async.....Network is Available");
    
    else
    
 UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Network Error" message:@"No Network Available" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil , nil];
        [alertView show];
    

或者您可以在 UIWebView 的委托方法下面发出警报

(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error

希望对您有所帮助...!

【讨论】:

这在它只是一个 WebView 时有效,但当 WebView 在 Tab 中时它不起作用。 它会工作的...只需将上面的代码放在您加载 webview 的视图控制器的 ViewWillAppear 中......! 我试过了:-(void)viewWillAppear:(BOOL)animated Reachability *reach... 等等,但是没有用...

以上是关于当 UIWebView 没有互联网连接时实现 UIAlertView的主要内容,如果未能解决你的问题,请参考以下文章

iPhone - UIWebView 在没有数据连接的情况下不调用 didFailLoadWithError

UIWebView 默认无连接页面

UIWebView + TVOut 问题

UI11上的UIWebView / WKWebView崩溃(用完可执行内存)

UIWebView 完成太快

UIWebview Facebook 连接