简单的布尔测试不起作用

时间:2011-03-23 07:40:35

标签: objective-c cocoa boolean-logic

嗨我有一个问题我想测试我的字符串是不是空的并且不等于string1我想做点什么但它不起作用。

我的代码:

 NSUserDefaults *namePrefs = [NSUserDefaults standardUserDefaults];
 NSString *savedName = [namePrefs stringForKey:@"myKey"];

if ((savedName != nil)&&([savedName isEqualToString:@"string1"])){ //

        [self myFunction];

    } 

当savedName为nil时,它不会进入

当它的值不是nil而不是string1时它会进入

但是当savedName是string1时,它会输入,为什么?

感谢任何帮助再见

3 个答案:

答案 0 :(得分:5)

你只是错过了条件中的“not”:

(savedName != nil) && ([savedName isEqualToString:@"string1"])

savedName不是nil并且等于给定字符串时,这将是真的。你想要这个:

(savedName != nil) && (![savedName isEqualToString:@"string1"])

另请注意,您可以删除第一部分,因为发送到nil个对象的邮件会返回NO

![nil isEqualToString:@"string1"] ≈ !NO ≈ YES

因此,nil字符串被视为与@"string1"不同。听起来合乎逻辑。

答案 1 :(得分:4)

因为你告诉它到这里:

if ((savedName != nil)&&([savedName isEqualToString:@"string1"])){

更改为:

if ((savedName != nil)&&(![savedName isEqualToString:@"string1"])){ //

答案 2 :(得分:2)

是的,如果savedname = string1,它将进入 然后它会进入街区,因为它是令人满意的条件。

savedname!= nil true

savedname == string1 true

那么为什么它不应该进入街区。它将进入bcoz它满足你的条件。