2011-08-03 20 views
0

私はコントロールの更新やその他のものを開始するときにアプリを持っています。アプリがいくつかのアップデートを見つけたら、アップデートが必要かどうかをユーザに尋ねます。ユーザーが「はい」を選択した場合、更新が完了するまでメイン画面にスピナーが表示されます。しかし、「はい」をタップすると、アラートビューは消えず、更新が完了するまで画面に残ります。 メインスレッドで実行されるスレッドを作成し、終了時に更新を停止することはできますか?そう おかげiOS - スレッドと警告表示

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 

    if (buttonIndex==1) { 
     [self showActivityViewer]; 
     [self downloadControlAndUpdatePoi]; 
     [self downloadControlAndUpdateItinerari]; 
     [self downloadControlAndUpdateArtisti]; 
     [self downloadControlAndUpdateEventi]; 
     [self hideActivityViewer]; 
     NSLog(@"AGGIORNA"); 
    } else { 
     NSLog(@"NON AGGIORNARE"); 
     return; 
    } 
} 
+0

いくつかのコードを表示できますか? – sergio

+0

はい、完了:) ... –

+0

は 'downloadControlAndUpdate ...'メソッドの同期または非同期ですか? – sergio

答えて

0

方法

[self downloadControlAndUpdatePoi]; 
    [self downloadControlAndUpdateItinerari]; 
    [self downloadControlAndUpdateArtisti]; 
    [self downloadControlAndUpdateEventi]; 

を同期的に実行(つまり、彼らは唯一の完全に処理した後に戻ることを意味します)している場合は、:

 [self hideActivityViewer]; 

は非常にのみ実行されます終わり。これに

単純なアプローチは、メインスレッド上で、あなたのメソッドの実行をスケジュールされています

[self performSelector:@selector(downloadControlAndUpdatePoi) withObject:nil afterDelay:0]; 
.... 
[self hideActivityViewer]; 

それらのメソッドが実行されるようにのみ後の制御はメインループに戻ってきたし、UIはされています更新しました。

そうでなければ、使用できます。

+ detachNewThreadSelector:toTarget:withObject: 

NSThreadから、多かれ少なかれ同じことをします。この場合は、すべてのdowloadAndUpdate...メソッドのラッパーメソッドを作成することをお勧めしますが、セカンダリスレッドからUIを更新することはできません。

いずれの場合も、警告表示を削除した後に、download...操作を残りのワークフローと同期させることには注意が必要です。

関連する問題