alertView textFieldAtIndex nil然后if-condition仍然通过

时间:2012-02-02 14:51:56

标签: objective-c xcode nsstring

我有一个简短的问题是有人想要+15代表。 :d

//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:好的,正如问题所回答的那样,我加入了

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

但是如果STILL通过而且它不应该通过。我不懂。 :(

5 个答案:

答案 0 :(得分:0)

您无法将字符串与==进行比较。如果你这样做,你要比较两个字符串实例的指针,这不太可能是你想要的。相反,尝试:

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

答案 1 :(得分:0)

使用NSStrings比较器比较Objective-C中的isEqualToString -

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

答案 2 :(得分: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");
}

答案 3 :(得分:0)

始终使用isEqualToString方法来比较字符串

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

答案 4 :(得分: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");

所以在上面的例子中, if 条件通过,因为指向该对象的指针不是 nil。它确实存在。