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

时间:2012-03-27 19:21:35

标签: objective-c cocoa nsstring string-comparison

  

可能重复:
  Why is my comparing if statement not working?

我正在尝试检查特定设置是否设置为“开”或“关”。这是我的代码:

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");

打印到日志是:

  

使用位置(否):开启

     

开启:否

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

以下是我加载默认值的代码:

- (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;
}

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

3 个答案:

答案 0 :(得分:5)

==比较指针,因此即使两个NSStrings具有相同的内容,它们在内存中也可能没有相同的地址,在这种情况下==将为false。

改为使用`isEqualToString':

if ([[self loadSettings:@"useLocation"] isEqualToString:@"On"]){
...

答案 1 :(得分:4)

您必须使用isEqualToString:

例如:

if ([myString isEqualToString:@"YES"]) {
    //do stuff
}

你这样做的方式实际上就是把指针与对象本身进行比较。

答案 2 :(得分:3)

使用:

if([[self loadSettings:@"useLocation"] isEqualToString: @"On"] {
    switchOn = YES;
}

As documented here

相关问题