开发者

didFailLoadWithError is called with UIWebView even though page later loads

开发者 https://www.devze.com 2023-03-27 16:38 出处:网络
I have a UIViewController which is a UIWebViewDelegate and has a UIWebView inside of it. I am trying to load a particular URL

I have a UIViewController which is a UIWebViewDelegate and has a UIWebView inside of it. I am trying to load a particular URL

    NSURL *url = [NSURL URLWithString:urlAddress];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    [webView loadRequest:requestObj];
    [self.view addSubview:webView];
    [webView release];

But the didFailLoadWithErrordelegate method is almost instantly called, and the error object is:

Did fail load with error: Error Domain=NSURLErrorDomain Code=-999 "The operation couldn’t be completed. (NSURLErrorDomain error -999.)" UserInfo=0x1a66c0 {NSErrorFailingURLKey=www.somewebsite.com, NSErrorFailingURLStringKey=www.somewebsite.com}

However a short time after, you can see that the website loads just fine.

Why is the fail method being called? And how do I know when it has actually failed versus when the method was called r开发者_运维百科egardless of if the website actually failed or not?


You can get this error when the page is instantly redirected via javascript or somehow else

You can avoid showing the error by answer from here: How do I fix NSURLErrorDomain error -999 in iPhone 3.0 OS

like

if ([error code] != NSURLErrorCancelled) { //show error alert, etc. }

but I don't know how to recognize where it was invoked.


So according to another StackOverflow question from a while back, the error code you're getting is being caused by a request being made before the previous request has been completed.

What may be happening is you are making multiple calls at the same time / very rapidly, and one is succeeding (so your web page loads) but the other is failing.


Use TapGesture on the web view using tapcount of 1. Using a function for handling TapGesture, check if the URL returns status code of 200, if so, call the below function

-(void)animateme{
    NSString *urlAddress = Connecting_URL
    NSURL *url = [NSURL URLWithString:urlAddress];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    [self.webview loadRequest:requestObj];
}

And, using delegate function,

-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
    UIAlertView  *alert = [[UIAlertView alloc] initWithTitle:@"Device in offline" message:@"Please check your internet connection" delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];
        [alert show];
}

Hope it helps :)

0

精彩评论

暂无评论...
验证码 换一张
取 消