for循环中的方法只被调用一次?

时间:2013-03-09 16:01:12

标签: ios objective-c uiwebview

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

有任何创造性的解决方法吗?

由于

    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"));
}

3 个答案:

答案 0 :(得分:5)

我认为发生的事情是,通过多次调用loadHTMLString:baseURL:,您只是覆盖了UIWebView要求的内容。所以最后一个获胜,代表只被召唤一次。

当然UIWebView可以编写为关闭并在一个单独的线程上异步加载(事实上确实如此)但是即便如此,你在以前加载的for循环中这么快就完成了在他们有机会加载之前取消,只有最后一个获胜。

答案 1 :(得分:0)

如果几乎​​同时调用多个加载,webViewDidFinishLoad:可能不会被调用,直到最后一个加载完成。也可能只有最后一个甚至会开始加载。

答案 2 :(得分:0)

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

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

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