我正在为 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 个网站,然后表明它已经“完成”了所有这些网站。
在应用程序移动到下一个之前,我还能做些什么来确保网站完成加载并呈现到屏幕上?