didFailLoadWithError вызывается с UIWebView, даже если страница загружается позже - PullRequest
10 голосов
/ 11 августа 2011

У меня есть UIViewController, который является UIWebViewDelegate и имеет UIWebView внутри него. Я пытаюсь загрузить определенный URL

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

Но метод делегата didFailLoadWithError вызывается почти мгновенно, а объект ошибки:

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}

Однако вскоре вы можете видеть, что веб-сайт загружается очень хорошо.

Почему вызывается метод fail? И как я узнаю, когда он действительно потерпел неудачу по сравнению с тем, когда был вызван метод, независимо от того, действительно ли произошел сбой веб-сайта или нет?

Ответы [ 3 ]

38 голосов
/ 11 августа 2011

Вы можете получить эту ошибку, когда страница мгновенно перенаправляется через javascript или как-то еще

Вы можете избежать отображения ошибки, ответив отсюда: Как исправить ошибку NSURLErrorDomain -999 в iPhone 3.0OS

как

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

, но я не знаю, как распознать, где он был вызван.

0 голосов
/ 19 июня 2015

Используйте TapGesture в веб-представлении, используя количество нажатий 1. Используя функцию для обработки TapGesture, проверьте, возвращает ли URL код состояния 200, если это так, вызовите следующую функцию

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

И, используя функцию делегата,

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

Надеюсь, это поможет:)

0 голосов
/ 11 августа 2011

Таким образом, в соответствии с другим вопросом StackOverflow, поступившим некоторое время назад , полученный вами код ошибки вызван запросом, сделанным до того, как был выполнен предыдущий запрос.

Чтоможет случиться, если вы совершаете несколько вызовов одновременно / очень быстро, и один из них выполняется успешно (поэтому загружается ваша веб-страница), а другой - не удается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...