2012-02-02 3 views
1

私は誰かが+15担当者を求めているという短い質問があります。 :DalertView textFieldAtIndex nil then if-conditionがとにかく進みます

//This returns nothing, nil, or "" (no quotes) 
NSLog(@"alert view text field : %@",[alertView textFieldAtIndex:0].text); 

//In theory this if-condition should NOT pass 
if([alertView textFieldAtIndex:0].text != nil || [alertView textFieldAtIndex:0].text != @"") 
{ 
    NSLog(@"IF!"); 
} 
//in other words, "else" should run 
else { 
    NSLog(@"ELSE"); 
} 

代わりに、私は出力としてこれを取得:

[29929:FB03]アラートビューのテキストフィールド:

[29929:FB03] IF!

EIDT:質問で答えて[OK]を、私は

if(!([[alertView textFieldAtIndex:0].text isEqualToString:@""]) || !([[alertView textFieldAtIndex:0].text isEqualToString: nil]) || !([alertView textFieldAtIndex:0].text != nil)) 

に置くが、もし、まだ通過して、それがいけません。理解できません。 :(

答えて

0

は常に文字列

比較することisEqualToStringメソッドを使用します(:isEqualToStringの.text [0 alertView textFieldAtIndexを]:@ ""])

0

あなたは==で文字列を比較することはできませんあなたは、あなたが望むものになることはほとんどありませんこれは、2つの文字列インスタンスのポインタをすることを比較しているならば代わりに、試してみてください。。

if([alertView textFieldAtIndex:0].text != nil || 
    ![[alertView textFieldAtIndex:0].text isEqualToString:@""]) 
{ 
    ... 
0

isEqualToStringコンパレータそうのような使用のObjective-CでNSStrings比較 -

if(![[alertView textFieldAtIndex:0].text isEqualToString:@""]) NSLog(@"IF!");

0

&&にあなたのオペレータを変更する代わりに|| :!

//This returns nothing, nil, or "" (no quotes) 
NSLog(@"alert view text field : %@",[alertView textFieldAtIndex:0].text); 

//In theory this if-condition should NOT pass 
if([alertView textFieldAtIndex:0].text != nil && [alertView textFieldAtIndex:0].text != @"") 
{ 
    NSLog(@"IF!"); 
} 
//in other words, "else" should run 
else { 
    NSLog(@"ELSE"); 
} 
0

これはあなたの問題はここに

[alertView textFieldAtIndex:0].text != nil 
です

NSStringをnilと比較しています。それについて考えてみましょう。あなたは何を比較しようとしていますか? NSStringに空の文字列リンクが含まれているかどうかを確認しようとしていますか? NSStringオブジェクトがnilを指しているかどうかを調べようとしていますか?

あなたはここで、これを見ることができます:

NSString *test = @"something in here"; 
if (test == nil) { 
    NSLog(@"String pointer is nil"); 
} 
else 
    // It will pass here 
    NSLog(@"String pointer is not nill"); 

を、そのオブジェクトへのポインタが nilでないので、したがって、上記のあなたのケースでは、場合の条件は、合格。それは実際に存在します。

関連する問題