didFailLoadWithError错误地报告没有连接

时间:2013-02-01 17:43:38

标签: uiwebview

我有一个带有标准视图控制器的应用程序,上面有多个按钮。每个按钮都链接到一个带有唯一UIWebView的独立视图控制器。每个UIWebView都实现了didFailLoadWithError,它似乎工作正常:当我关闭wifi,并尝试从主视图控制器页面加载UIWebView时,我正确地从didFailLoadWithError获取错误消息。当我打开wifi并加载UIWebView时,它工作正常 - 没有错误。但是,当我单击该UIWebView页面中的链接时,我再次收到didFailLoadWithError错误。更有趣的是,我清除了错误消息,新页面仍然从我刚刚点击的链接加载,所以我知道连接是好的。这是我的实现...有没有人知道强制didFailLoadWithError的方法只在第一次加载时运行一次并在验证网络连接好后再次禁止它运行?

@synthesize webView;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

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

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Network Alert"    message:@"No Internet Connection - Please Check Your Network Settings and Try Again" delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
    [alert show];
}


- (void)viewDidLoad
{
    [super viewDidLoad];
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:     @"http://www.site.com/index.html"]]];
    [webView addSubview:activity];
    timer=[NSTimer scheduledTimerWithTimeInterval:(1.0/2.0)
        target:self selector:@selector(loading) userInfo:nil repeats:YES];
           }

- (void)loading {
    if (!webView.loading)
        [activity stopAnimating];
        else
            [activity startAnimating];
}

1 个答案:

答案 0 :(得分:2)

我刚遇到这个问题。是什么时候,当你点击网页视图中的链接时,当页面仍在加载时,你会收到错误-999。这转换为NSURLErrorCancelled

您可以在以下链接中找到更多信息。转到URL Loading System Error Codes部分。 https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/Reference/reference.html

在我的代码中,我正在告诉一个警告视图,弹出说在调用-webView:didFailLoadWithError:时互联网连接丢失了。我将该代码包装在错误对象的条件周围。这是一个例子。

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
    if ([error code] == NSURLErrorNotConnectedToInternet || [error code] == NSURLErrorNetworkConnectionLost) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"Check internet connection." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
        [alert show];
    }
}