2012-05-05 2 views
-4

2つのいずれかが発生した場合に、1つのコードを実行する方法はありますか?具体的には、2つのTextFieldがあり、いずれかが空の場合は、アクションが実行されたときにUIAlertViewをポップアップします。私はif/or文は使用できますか?

if ([myTextField.text length] == 0) { 
    NSLog(@"Nothing There"); 
    UIAlertView *nothing = [[UIAlertView alloc] initWithTitle:@"Incomplete" message:@"Please fill out all fields before recording" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil]; 
    [nothing show]; 
    [nothing release]; 
} 
if ([yourTextField.text length] == 0) { 
    NSLog(@"Nothing For Name"); 
    UIAlertView *nothing = [[UIAlertView alloc] initWithTitle:@"Incomplete" message:@"Please fill out all fields before recording" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil]; 
    [nothing show]; 
    [nothing release]; 
} 

を設定することができますが、両方が空の場合、それは、文を2回ポップアップ表示されます。

いずれかまたは両方が空の場合、どのようにして1回だけポップアップ表示できますか?

+0

Hey @AshBurlaczenko追加するものがない場合は、コメントしないでください。あなたは今すぐにフラグを立てようとしています – user717452

+2

@ AshBurlaczenkoのコメントはこの場合正しいです。 Objective-Cの中で最も基本的な言語の構文について質問しています。 Objective-Cの簡単なチュートリアルではおそらくあなたを助けてくれるでしょうが、ここで混乱しているかもしれないことについてお気軽に質問してください。 –

+2

@ user717452、私のコメントを報告する理由は何ですか?答えは非常に基本的なプログラミングのコンセプトであり、構文は言語ごとに異なるかもしれませんが、基本的なことを知ることで、簡単にGoogleを使って答えを見つけ出すことができます。私は客観的にプログラミングされたことはありませんが、私は基本を理解しているので、答えを知っていました。 –

答えて

2

あなたは||(または)演算子を使用して単一のifの文の中に二つの条件を組み合わせることができます。

if (([myTextField.text length] == 0) || ([yourTextField.text length] == 0)) { 
    NSLog(@"Nothing There"); 
    UIAlertView *nothing = [[UIAlertView alloc] initWithTitle:@"Incomplete" 
                 message:@"Please fill out all fields before recording" 
                delegate:self 
              cancelButtonTitle:@"Ok" 
              otherButtonTitles:nil]; 
    [nothing show]; 
    [nothing release]; 
} 
0

使用複合条件

if (([myTextField.text length] == 0) || ([yourTextField.text length] == 0))) { 
    NSLog(@"Nothing There"); 
    UIAlertView *nothing = [[UIAlertView alloc] initWithTitle:@"Incomplete" message:@"Please fill out all fields before recording" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil]; 
    [nothing show]; 
    [nothing release]; 
} 
0

他の回答が指摘するように、あなたがまたはこのような遅延評価を行うことができます。

if ([myTextField.text length] == 0 || [yourTextField.text length] == 0) { 

遅延評価(||代わりの|を)だけで第2の条件は場合にのみ実行されることを保証しますそれはする必要があります。

これらはBOOLに評価されるので、利点を生かして物事の名前を付けることができます。例:

BOOL eitherFieldZeroLength = ([myTextField.text length] == 0 || [yourTextField.text length] == 0); 
if (eitherFieldZeroLength) { 

これは現在のケースでは簡単ですが、中間変数を使用すると、コードがわかりやすくなります。

+3

論理的な '||'はビット単位の怠惰なバージョンや '|'ではありません。あなたが提案した方法でそれらを使用するときのように動作するように見えます。論理値は真または偽の値を比較していますが、ビットごとにまたは個々のビットを一緒にor'ingしています。 – mttrb

+0

@mttrb私はこれを取得した後、私の答えを訂正したり削除したりしてうれしいです。あなたはどういう意味ですか?これらは短絡評価ではありませんか? http://en.wikipedia.org/wiki/Short-circuit_evaluationまた、「そういうもののように働いているように見えるのはどういう意味ですか?」彼らはそのように働くのですよね? –

関連する問題