我打开了一个UIwebview,从其中一个网站获得了一些URL,然后我将这些URL保存在一个数组中,现在我想在webview中逐个打开这些URL。我已经尝试通过运行for循环并加载每个URL但是,它没有打开每个URL,在完成循环后它只打开循环中的最后一个URL。 这是我的循环代码:
for(int z = 0; z<[FinalUrlArray count]; z++){
sleep(20.0);
NSLog(@"URLs are %@", [FinalUrlArray objectAtIndex:z]);
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[FinalUrlArray objectAtIndex:z]]]];
}
如果我犯了一些错误,或者任何人可以帮助我,我可以建议我如何做到这一点。
编辑:
-(void)buttonPressed:(id)sender{
FinalUrlArray = [[NSMutableArray alloc] init]; //CODE FOR creating FinalURLArray
for(int z = 0; z<[FinalUrlArray count]; z++){
NSLog(@"URLs are %@", [FinalUrlArray objectAtIndex:z]);
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString: [FinalUrlArray objectAtIndex:z]]]];
}
}
- (void)webViewDidFinishLoad:(UIWebView *)webView1 {
NSLog(@"Current Url is %@", currentURL);
}
答案 0 :(得分:0)
您是否使用ViewDidLoad
之类的方法调用此循环?
请记住,应用程序将在绘制屏幕之前处理整个循环,以便UIWebView仅显示最后一个URL。您的计时器需要完全在屏幕绘图生命周期之外运行。
如果您使用一些JavaScript创建一个HTML页面,然后迭代遍历URL数组的内容,将它们加载到整页iframe中,该怎么办?
修改强>
您的应用程序需要存储您显示的当前URL的索引,方法与存储FinalUrlArray
的方式相同。使用从您的TouchUpInside
事件调用的方法为您的按钮加载第一个URL,然后按照@ user1213334的答案中的建议启动计时器,以便在间隔后再次调用该方法。每次你需要增加方法中的索引,直到你结束。确保对方法的每次调用都为下一次加载启动一个新的计时器,除非你到达终点。
答案 1 :(得分:0)
我认为你的问题是由于以下原因之一:
1)您尝试过快加载这些网址。
2)睡眠功能冻结所有应用程序。如何使用任务调度而不是它呢?
<强>更新强>
要安排一项任务,您可以使用以下内容:
NSTimer *timer;
if (!myTimer) {
myTimer = [NSTimer scheduledTimerWithTimeInterval:20
target:self selector:@selector(doTimer:)
userInfo:nil
repeats:YES];
}
其中“doTimer:”是一个函数:
- (void)doTimer:(NSTimer *)timer
要安排许多任务,您还可以尝试安排具有不同间隔的任务,这些间隔在循环中增加。它允许在两个任务的开始之间设置20秒的间隔。 如果您需要实现您编写的相同代码而不进行更改,那么我建议您编写“重复:否”并在前一个任务结束时安排另一个任务。它允许在一个任务的结束和另一个任务的开始之间间隔20秒。