没有调用iOS webViewDidFinishLoading

时间:2013-04-02 05:04:27

标签: ios uiwebview

我有一个UIWebView,并希望在加载时显示活动指示符。然后在webViewDidFinishLoading时隐藏它。唯一的问题是我收到了这个NSURLErrorDomain错误-999的事情。搜索后我发现this fix无法显示任何错误消息,但我的webViewDidFinishLoading并没有被调用来摆脱我的活动指示器以及我正在进行的其他事情。我想我可以在我的webViewDidFailWithError方法中调用didFinishLoading方法,如果它以-999失败但是看起来超级hacky和错误。关于如何解决这个问题的任何想法?

编辑* 我已经弄清楚webview被要求加载两次所以我能够摆脱错误-999。但是,似乎没有调用委托方法,除非我尝试加载webview两次(在这种情况下webViewDidFinishLoading方法只调用一次)。

- (void)viewDidLoad
{
    self.webView.delegate = self;
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(refresh)
                                                 name:@"DidBecomeActive"
                                               object:nil];
    [super viewDidLoad];
}
-(void)refresh{
    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://myapp.com/app/"]]];
    self.webView.scrollView.bounces = NO;
}

- (void)webViewDidFinishLoading:(UIWebView *)wv
{
    NSLog(@"finished loading");
    [self.activityInd stopAnimating];
    [self.view bringSubviewToFront:wv];
}

- (void)webView:(UIWebView *)wv didFailLoadWithError:(NSError *)error
{
    NSLog(@"Failed: %@", error);
    if([error code] == NSURLErrorCancelled){
        return;
    }
    [self.activityInd stopAnimating];
    [[[UIAlertView alloc] initWithTitle:@"Can't find server" message:@"Check your internet connection and try again." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]show];
}

4 个答案:

答案 0 :(得分:13)

您是否已将UIWebView委托分配给其对象,如下所示

webViewObject.delegate = self 

答案 1 :(得分:3)

复制/粘贴错误。

- (void)webViewDidFinishLoading:(UIWebView *)wv

应改为:

- (void)webViewDidFinishLoad:(UIWebView *)wv

答案 2 :(得分:1)

在.h文件中实现协议“UIWebViewDelegate”

答案 3 :(得分:0)

如果你在这里结束了,因为你想知道为什么当错误不是由于错误编写的委托方法而导致你的委托方法没有被调用时:

假设您的webview通常是通过Interface Builder实例化的,但是您忘记正确连接它(意味着它没有实例化)。您仍然可以设置其委托(例如self.webview.delegate = self;)而不会出现崩溃或异常(提供的self符合UIWebViewDelegate协议)。

同样,您可以将HTML加载到其中(例如,[self.webview loadHTMLString:someHTMLString baseURL:nil];),应用程序将继续愉快而无需投诉。这将带您进入一个尴尬的情况,您已设置委托,正确编写委托方法,将某些内容加载到webview中,但您的委托方法永远不会触发。

所以针对这种情况的建议:确保在Interface Builder中仔细检查您的webview是否正确连接(到正确的实例属性/变量)。