iPhone - UIWebView - нажатие на URL перед загрузкой страницы приводит к тому, что didFailLoadWithError выдает ошибку - PullRequest
3 голосов
/ 13 января 2011

В моем приложении для iPhone я показываю веб-страницу в веб-просмотре.Я реализовал метод делегата следующим образом:

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Error loading the requested URL" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
    [alert release];
}

Когда я открываю URL-адрес и загружаю половину страницы, я сразу нажимаю какую-то другую ссылку на веб-странице.В то же время этот метод делегата вызывается.Как я должен запретить вызывать метод делегата, когда веб-страница загружена наполовину и нажата ссылка URL.

Или может быть другое решение - вызвать stopLoading при нажатии на какой-либо URL.Как я могу это сделать?

Ответы [ 2 ]

4 голосов
/ 23 мая 2011

Код ошибки NSURLErrorCancelled уведомляет вас о том, что URLLoadingSystem «остановила загрузку». Это происходит, например, когда пользователь щелкает ссылку на странице, которая загружена только наполовину ... URLLoadingSystem останавливает ее, поэтому вам не нужно.

- (void) webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error 
{   
    // If the URLLoadingSystem cancelled the load don't show anything. 
    if ( [error code] == NSURLErrorCancelled ) 
    {
        //...this is called when the load is cancelled...
    }
    else 
    {
        //...handle the error and show the alert ...
    }
}
2 голосов
/ 13 января 2011

Как запретить вызывать метод делегата, когда веб-страница загружена наполовину и нажата ссылка URL.

Вы не можете остановить вызов метода, но вы можетебыть в состоянии проверить свойства объекта error, чтобы определить, какую ошибку вы получили.

Или может быть другое решение - вызвать stopLoading при нажатии на какой-либо URL.Как я могу это сделать?

Вы можете использовать webView:shouldStartLoadWithRequest:navigationType:, который будет вызываться всякий раз, когда пользователь выполняет какое-либо навигационное действие (например, нажимает на ссылку, отправляет форму и т. Д. Вы можете использовать * 1013).* определить, что это было за действие).Оттуда должна быть возможность вызова stopLoading (хотя webView может по-прежнему вызывать метод webView:didFailWithError:, я не уверен ... см. Первую часть о том, как с этим справиться).

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