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



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

-(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];
}

我试过可达性,但它很复杂,我不确定如何实现它到一个UIAlertView。这段代码可以通过调整工作吗?或者它是垃圾?

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

webView主要有三种委托方法

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
- (void)webViewDidFinishLoad:(UIWebView *)webView

在didFailLoadWithError方法中,你可以使用[error code]来识别错误代码。您可以根据需要使用其中任何一个。

// 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];
 }

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

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

将被触发。我想你错过了这一点,否则你的过程是正确的。所以,在你的。h文件中添加UIWebViewDelegate。

你可以在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的委托方法下面设置alert

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

希望它能帮助你…!

相关内容

最新更新