iPhone - UIWebView - 在页面加载之前单击URL会使didFailLoadWithError抛出错误

时间:2011-01-13 13:35:30

标签: iphone uiwebview

在我的iPhone应用程序中,我正在webview中显示一个网页。 我按如下方式实现了委托方法:

- (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链接时,我应该如何阻止调用委托方法。

或者其他一些解决方案可以在单击某个URL时调用stopLoading。我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

错误代码 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 ...
    }
}

答案 1 :(得分:2)

  

当网页加载一半并点击URL链接时,我应该如何阻止调用委托方法。

您无法真正停止调用该方法 - 但您可以检查error对象的属性以确定您遇到的错误类型。

  

或者其他一些解决方案可以在单击某个URL时调用stopLoading。我怎么能这样做?

您可以使用webView:shouldStartLoadWithRequest:navigationType:,只要用户采取某种导航操作(例如点击链接,提交表单等),就会调用navigationType。您可以使用stopLoading来确定操作是什么) 。应该可以从那里调用webView:didFailWithError:(虽然webView可能仍然会调用{{1}}方法,但我不确定...请参阅第一部分,了解如何处理该问题。) / p>