我正在尝试检查特定设置是否设置为“开”或“关”。这是我的代码:
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
,所以我真的不确定问题是什么。在编译之前或之后,我在构建环境中完全没有错误。
答案 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;
}