1

我正在为 iOS 编写一种诊断应用程序,它会打开预先确定的网站列表并记录每个网站加载所用的时间。我让应用程序在 ViewController 中打开 UIWebView。

以下是 ViewController 源代码的重要部分:

- (void)viewDidLoad {
    [super viewDidLoad];
    DataClass *obj = [DataClass getInstance];
    obj.startOfTest = [NSDate date];

    //load the first webpage
    NSString *urlString = [websites objectAtIndex:obj.counter];  //assume firstWebsite is already instantiated and counter is initially set to zero
    obj.counter = obj.counter + 1;
    NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [obj.websiteStartTimes addObject:[NSDate date]];
    [webView loadRequest:request];
}

- (void)webViewDidFinishLoading:(UIWebView *)localWebView{
    DataClass *obj = [DataClass getInstance]; //gets 'global' variables

    if(!webView.loading){ 
        NSString *urlString = [websites objectAt:obj.counter];
        obj.counter = obj.counter + 1;
        NSURL *url = [NSURL URLWithString:urlString];
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        [obj.websiteStartTimes addObject:[NSDate date]];
        [webView loadRequest:request];
    }

这段代码的问题在于它似乎在完成之前加载下一个网站。我原以为对 webViewDidFinishLoading 的调用和其中的 if 语句都可以确保网站完成,但事实并非如此。我注意到有时,单个网站会多次调用 didFinishLoading 方法,但它只会输入一次 if 语句。

例如,如果我有一个包含 10 个网站的列表,webView 只会真正显示列表中的第 3 和第 6 个网站,然后表明它已经“完成”了所有这些网站。

在应用程序移动到下一个之前,我还能做些什么来确保网站完成加载并呈现到屏幕上?

4

0 回答 0