2012-03-15 16 views
1

私はUIwebviewを開き、あるサイトからいくつかのURLを取得します。次に、これらのURLを配列に保存します。これらのURLをWebビューで1つずつ時間間隔を置いて開きたいとします。 forループを実行して各URLをロードしようとしましたが、すべてのURLを処理していません。ループの完了後、ループ内の最後のURLだけが開きます。私はいくつかの間違いを犯していますか、私はこれを行うことができますどのように誰も私を助けることができる場合URLをuiwebviewにロードする

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]]]]; 

} 

は誰も私を提案することができます: はここにループのための私のコードです。

EDIT:

-(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ページを作成し、それをフルページのiframeに読み込むURLの配列の内容を反復処理するとどうなりますか?あなたのアプリケーションは、あなたがすでにFinalUrlArrayを格納しているのと同じ方法を示している現在のURLのインデックスを格納する必要があります

EDIT

。ボタンのTouchUpInsideイベントから呼び出されたメソッドを使用して最初のURLをロードしてから、@ user1213334の回答に示唆されているようにタイマーを開始し、間隔の経過後にメソッドを再度呼び出します。終了するまで、メソッドのインデックスを増分する必要があるたびに。最後に到達しない限り、メソッドの各呼び出しで次の負荷のための新しいタイマーが開始されることを確認してください。

+0

私たちはボタンを持っていて、このボタンを押すとこのループを実行し、配列からURLを取得します。だから、コードのどのような変更がそれを働かせることができ、タイマーはどうですか?新しいURLが読み込まれる前にページ全体が読み込まれるように、そのタイマーをどこで使うことができますか? 私はHTMLページとJavaScriptを使用することができますが、私はロードタイムの​​計算や他のいくつかのことをやっているので、私はwebviewを使っています。 –

+0

@ Alok私はいくつかの提案を追加しましたが、あなたがまだ立ち往生している場合は、さらにコードを追加する必要があります。 –

+0

Hey Dave、私はボタンプレス機能とDidLoadFinishで質問を編集しました。ボタンの押下は、配列からWebViewにwebviewのURLをロードすると想定されるイベントハンドラです。助けてください。 –

0

私はあなたの問題は、これらの理由の一つであると思う:

1)あなたが速すぎて、これらのURLをロードしてみてください。

2)スリープ機能はすべてのアプリケーションをフリーズします。タスクスケジューリングの代わりにタスクスケジューリングを使用するのはどうですか? "doTimerは:" どこ

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

:関数である:

- (void)doTimer:(NSTimer *)timer 

あなたはこのようなものを使用することができますつのタスクをスケジュールするには

The original article is here

を更新しました

多くのタスクをスケジュールするまた、ループで増加するさまざまな間隔でタスクをスケジュールすることもできます。これは、2つのタスクの開始の間に20秒の間隔を設定することを可能にする。 変更を加えずに書いた同じコードを実装する必要がある場合は、「繰り返し:NO」と書いて、前のタスクの最後に別のタスクをスケジュールするようアドバイスします。これは、1つのタスクの終了と別のタスクの開始との間に20秒の間隔を作ることを可能にする。

+0

URLはすばやく読み込まれません。私は睡眠を使用しています。私はまだそれが速くURLをロードするかどうかは知らない。 xcodeでの味のスケジューリング!いくつかの例を挙げて私を助けてください。 –

+0

あなたのお手伝いをするために投稿を編集しました。しかし、私はタスクスケジューリングが睡眠機能よりずっと優れているとは思わない。 – Gargo

+0

私はこれを試してみるだろうし、uに戻るだろう。どうもありがとう。 :) –

関連する問題