3

我有一个UIWebView并且想在加载时显示一个活动指示器。然后在webViewDidFinishLoading. 唯一的问题是我遇到了这个NSURLErrorDomain错误 -999 的事情。在四处搜索之后,我发现这个修复程序不会显示任何错误消息,但我webViewDidFinishLoading从来没有被调用来摆脱我的活动指示器和我正在进行的其他事情。我想我可以didFinishLoading在我的 webViewDidFailWithError 方法中调用该方法,如果它以 -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

4 回答 4

13

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

webViewObject.delegate = self 
于 2013-04-02T05:13:29.583 回答
3

复制/粘贴错误。

- (void)webViewDidFinishLoading:(UIWebView *)wv

应改为:

- (void)webViewDidFinishLoad:(UIWebView *)wv
于 2013-04-02T05:48:02.267 回答
1

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

于 2013-04-02T07:38:29.493 回答
0

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

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

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

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

于 2014-03-06T04:17:29.957 回答