2012-02-02 53 views
1

我有一个简短的问题是有人想要+15代表。 :dalertView textFieldAtIndex nil then if-condition passed anyway

//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如果!

EIDT:OK,被问的回答,我把

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

但如果还是通过与它不应该。我没有明白。 :(

回答

0

总是则应使用isEqualToString方法比较字符串

!([alertView textFieldAtIndex:0]的.text isEqualToString:@ “”])

0

你不能==比较字符串如果你这样做,你比较两个字符串的情况下,这是不可能的指针是你想要的东西相反,尝试:。

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

使用比较在Objective-C NSStringsisEqualToString比较像这样 -

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为零。想一想,你想比较什么?你是否试图查看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"); 

所以在上面的情况下,如果条件通过,因为指针指向对象是零。它确实存在。