【问题标题】:iOS webViewDidFinishLoading not being callediOS webViewDidFinishLoading 未被调用
【发布时间】:2013-04-02 05:04:26
【问题描述】:

我有一个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];
}

【问题讨论】:

    标签: ios uiwebview


    【解决方案1】:

    你是否将 UIWebView 委托分配给它的对象,如下所示

    webViewObject.delegate = self 
    

    【讨论】:

    • 是的,但由于某种原因,它直到第二次尝试才​​被调用。
    【解决方案2】:

    复制/粘贴错误。

    - (void)webViewDidFinishLoading:(UIWebView *)wv
    

    应改为:

    - (void)webViewDidFinishLoad:(UIWebView *)wv
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        同样,您可以将 HTML 加载到其中(例如,[self.webview loadHTMLString:someHTMLString baseURL:nil];),应用程序将继续愉快地运行而不会产生任何抱怨。这会让您陷入尴尬的境地,您已经设置了委托、正确编写了委托方法、将某些内容加载到了 webview 中,但您的委托方法永远不会触发。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-05
          • 2015-05-22
          • 2014-12-14
          • 2013-04-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多