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,所以我真的不确定问题是什么.在编译之前或之后,我在构建环境中完全没有错误.
==比较指针,所以即使两个NSStrings具有相同的内容,它们在内存中可能没有相同的地址,在这种情况下==也是错误的.
改为使用`isEqualToString':
if ([[self loadSettings:@"useLocation"] isEqualToString:@"On"]){
...
Run Code Online (Sandbox Code Playgroud)