在uiwebview中加载URL

时间:2012-03-15 05:56:23

标签: ios uiwebview

我打开了一个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);
}

2 个答案:

答案 0 :(得分:0)

您是否使用ViewDidLoad之类的方法调用此循环?

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

如果您使用一些JavaScript创建一个HTML页面,然后迭代遍历URL数组的内容,将它们加载到整页iframe中,该怎么办?

修改

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

答案 1 :(得分:0)

我认为你的问题是由于以下原因之一:

1)您尝试过快加载这些网址。

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秒。