简单的布尔测试不起作用

Csa*_*abi 0 cocoa boolean-logic objective-c

嗨,我有一个问题,我想测试,如果我的字符串不是空的,不等于string1我想做的事,但它不起作用.

我的代码:

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

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

        [self myFunction];

    } 
Run Code Online (Sandbox Code Playgroud)

当savedName为nil时,它不会进入

当它的值不是nil而不是string1时它进入它也没关系

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

谢谢你的任何帮助

zou*_*oul 5

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

(savedName != nil) && ([savedName isEqualToString:@"string1"])
Run Code Online (Sandbox Code Playgroud)

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

(savedName != nil) && (![savedName isEqualToString:@"string1"])
Run Code Online (Sandbox Code Playgroud)

另请注意,您可以删除第一部分,因为发送给nil对象的消息会返回NO:

![nil isEqualToString:@"string1"] ? !NO ? YES
Run Code Online (Sandbox Code Playgroud)

因此,nil字符串被认为是不同的@"string1".听起来合乎逻辑.