0

我想我错过了一些非常基本的东西,但无论如何我都会冒险:)。我正在使用 for 循环将不同的 html 加载到UIWebView. 当 html 完成加载时,我想做一些不相关的事情并继续前进。出于某种原因webViewDidFinishLoad,即使我在 htmlArray 中有 20 个对象并且我正在尝试找出方法,也只会在 for 循环的过程结束时调用一次。

有什么创造性的方法来解决吗?

谢谢

    for(int i=0;i<[_htmlArray count];i++)
        {
            msg = [_htmlArray objectAtIndex:i];
            [_tempWebView loadHTMLString:msg baseURL:nil];
        }
}

...

- (void)webViewDidFinishLoad:(UIWebView *)webView {

    [self doSomeStuff:webView]; // <--only called once

    NSLog(@"didFinish Snip Snap: %@; stillLoading:%@", [[webView request]URL],
          (webView.loading?@"NO":@"YES"));
}
4

3 回答 3

5

我假设正在发生的事情是通过loadHTMLString:baseURL:多次调用,你只是覆盖了你要求做的UIWebView事情。所以最后一个获胜,代表只被调用一次。

当然UIWebView可以写成在一个单独的线程上异步加载(它确实如此),但即便如此,你在 for 循环中执行它的速度如此之快,以至于之前的加载在它们有机会之前被取消了加载,只有最后一个获胜。

于 2013-03-09T16:05:21.493 回答
0

如果您几乎同时调用多个负载,webViewDidFinishLoad:则可能要等到最后一个负载完成加载后才会调用。也有可能只有最后一个甚至会开始加载。

于 2013-03-09T16:06:25.910 回答
0

for 循环在再次开始加载之前不会等待视图完成加载,因此很可能只有最后一次调用实际上有机会完成并调用webViewDidFinishLoad.

创建一个名为的实例变量count并加载viewDidLoad. 在webViewDidFinishLoad增量实例变量。当count你达到20时,你就完成了。

这样,在调用下一个页面之前加载每个页面。

于 2013-03-09T16:06:44.413 回答