2009-08-10 8 views
-2

ユーザーがalertview確認を選択するまで、代理メソッドを待機させるにはどうすればよいですか?実行がブロックされ、確認AlertViewがユーザーによって却下され、結果が返される

BOOL userChoice = FALSE; 

私はこのデリゲートメソッドを持っている:ダイアログを返すようにするために

-(BOOL) returnUserChoiceYESorNO:(NSString*)message { //delegate method 

UIAlertView *msgBox = [[UIAlertView alloc] initWithTitle:@"Your Choice" message:message delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK",nil]; 
    [msgBox show]; 
    [msgBox release]; 

//// HOW CAN I MAKE IT WAIT HERE, UNTIL I RECEIVE USER Responce from ClickedButtonAtIndex? (without using while loop or infinite loops) 

return userChoice; 


} 

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

if(buttonIndex==0) { 
userChoice = NO; 
else 
{ 
userChoice = YES; 
} 

} 

答えて

0

が待ってはいけません。アラートをポップアップしてメソッドを終了させるのはずっと簡単ですし、必要な作業を行う前にアラートが戻ってくるのを待ってください。

+0

これはDELEGATEメソッドです。電話を受けるとすぐに対応する必要があります。 – RealHIFIDude

0

ループを使用することはできません。あなたがそれを避けることができれば、そこに止まるべきではありません。あなたの方法は何を呼びますか?後で値をテストするために再構成することができますか、または後で回答を返すことができるように物を書き換えることはできますか?

最悪の場合、おそらく、あなたを呼び出すコードを迂回し、ダイアログを開き、値をキャッシュし、最初にコードを呼び出す原因となった条件を作成します。

これらのGUIシステムは、通常、ハングすることはなく、戻ってきて、ほとんどの時間スレッドを実行しません。あなたがそれを回避しようとすると、あなたはあらゆる種類のスレッディングと状態の問題に終わるでしょう。

0

-doSomething()あなたがしたいものは何でもアクションを実行するには、{ が//あなたのコードのようなユーザー定義のメソッドを作成します。 }

ユーザーが0インデックスをタップするとすぐにこのメソッドを呼び出します。

(ボイド)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 場合(buttonIndex == 0){ [自己のdoSomething]。 else [self doOther]; }

方法を作成する必要

- (BOOL)returnUserChoiceYESorNO:(NSStringの*)メッセージ{

}

ちょうどデリゲート方法

-clickedButtonAtIndex

を追加します

これは簡単な実装方法です。

関連する問題