if()中的字符串比较遵循错误的分支

Jam*_*mes 0 cocoa objective-c string-comparison nsstring

可能重复:
为什么我的比较if语句不起作用?

我试图检查特定设置是否设置为"开"或"关".这是我的代码:

BOOL switchOn;
if ([self loadSettings:@"useLocation"] == @"On"){
    switchOn = YES;
    NSLog(@"Use Location (Yes): %@",[self loadSettings:@"useLocation"]);
}else{
    switchOn = NO;
    NSLog(@"Use Location (No): %@",[self loadSettings:@"useLocation"]);
}
NSLog(@"Switch On: %@",switchOn ? @"YES":@"NO");
Run Code Online (Sandbox Code Playgroud)

打印到日志是:

使用位置(否):开

开启:没有

您可以看到,对于"使用位置(否)",该功能不应该返回"开".但它确实回归"开启".我没有正确比较它们吗?

这是我加载默认值的代码:

- (NSString *)loadSettings: (NSString *)key{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults synchronize]; // this method is optional

    // Get the results out
    NSString *results = [defaults stringForKey:key];

    return results;
}
Run Code Online (Sandbox Code Playgroud)

我回来了NSString,所以我真的不确定问题是什么.在编译之前或之后,我在构建环境中完全没有错误.

yuj*_*uji 5

==比较指针,所以即使两个NSStrings具有相同的内容,它们在内存中可能没有相同的地址,在这种情况下==也是错误的.

改为使用`isEqualToString':

if ([[self loadSettings:@"useLocation"] isEqualToString:@"On"]){
...
Run Code Online (Sandbox Code Playgroud)