2012-03-15 93 views
1

我打开一个UIwebview,并从其中一个网站获得一些URL,然后将这些URL保存在一个数组中,现在我想在webview中以一段时间间隔逐个打开这些URL。我试图通过运行一个for循环并加载每个urls,但它并没有打开每个URL,循环完成后它只打开循环中的最后一个URL。 这里是我的循环代码:在uiwebview中加载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

你打电话从像ViewDidLoad的方法之一,这个循环?

请记住,应用程序将在屏幕绘制之前处理您的整个循环,以便UIWebView只显示最后一个URL。您的计时器将需要完全在屏幕绘图生命周期之外进行操作。

如果你用一些JavaScript创建了一个HTML页面,并且通过遍历URL数组的内容将它们加载到一个完整的页面iframe中,那么怎么办?

编辑

您的应用程序将需要存储,你都呈现相同的方式,你已经存储FinalUrlArray当前URL的索引。使用您的按钮中的TouchUpInside事件调用的方法加载第一个URL,然后按照@ user1213334的答案中的建议启动计时器,以在间隔后再次调用该方法。每次您需要增加方法中的索引时,直到最后。确保对方法的每次调用都会为下一次加载启动一个新的定时器,除非您到达最后。

+0

我们有一个按钮,并在该按钮上按我运行此循环,并从数组中获取URL。那么代码中的哪些变化可以使其工作,计时器又如何呢?我可以在哪里使用该计时器,以便在新URL开始加载之前整个页面都可以加载。 我不能采取办法,我可以使用HTML页面和JavaScript,因为我正在做加载时间计算和其他一些事情,以及我使用的是webview。 – 2012-03-15 06:14:47

+0

@Alok我已经添加了一些更多的建议,但如果您仍然陷于困境,您可能需要添加更多代码。 – 2012-03-15 22:59:01

+0

嘿戴夫,我已经编辑我的问题与按钮按下功能和DidLoadFinish。请注意,按下按钮是一个事件处理程序,它假设从WebView中将数组加载到webview的webview中。请帮忙。 – 2012-03-16 17:35:18

0

我觉得你的问题是由于这些原因之一:

1)你试图太快加载这些URL。 2)睡眠功能冻结所有的应用程序。如何使用任务调度来代替它?

更新

The original article is here

要安排一个任务,你可以使用这样的事情:

NSTimer *timer; 
if (!myTimer) { 
     myTimer = [NSTimer scheduledTimerWithTimeInterval:20 
           target:self selector:@selector(doTimer:) 
           userInfo:nil 
           repeats:YES]; 
    } 

其中 “doTimer:” 是一个功能:

- (void)doTimer:(NSTimer *)timer 

安排很多任务您还可以尝试安排循环中不断增加的各种时间间隔的任务。它允许在两个任务的开始之间设置20秒的时间间隔。 如果你需要实现你没有改变的相同代码,那么我建议你写下“重复:否”,并安排上一个任务的末尾。它允许在一个任务的结束和另一个任务的开始之间进行20秒的间隔。

+0

网址不应该被加载得很快,那是我正在使用睡眠。如果它仍然会加载网址,我不知道。在xcode中调度tast!你能帮我举一些例子吗? – 2012-03-15 06:55:23

+0

我已编辑我的帖子来帮助你。但我不认为那个任务调度比睡眠功能要好得多 – Gargo 2012-03-15 10:08:39

+0

我会试试这个,并且会回到你身边。非常感谢。 :) – 2012-03-15 11:17:25