可能重复:
Comparing Strings in Cocoa
Why is this code not recognising the NSString as being equal?
我在NSUserDefaults中将值设置为@“YES”。当我运行这种方法时......
- (void) checkForHint {
NSLog(@"call:checkForHint");
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSLog(@"valueForKeyInDefaults:%@",[defaults valueForKey:@"giveHint"]);
if ([defaults valueForKey:@"giveHint"] == @"YES") {
NSLog(@"need to give hint");
// replace a letter at random
int i=0;
bool found = NO;
while (!found && i<NUM_CHARACTERS_IN_LEVEL_STRING) {
NSLog(@"searching at index %i",i);
if ([buttons objectAtIndex:i] && 32==[[levelSavedSolutionArray objectAtIndex:i] intValue]) {
found = YES;
}
i++;
}
i--;
// We need to select all the buttons at this unsolved space
[self buttonClicked:[buttons objectAtIndex:i]];
// update the entries in all selected buttons
[self keyAct:[[levelStringArray objectAtIndex:i] intValue]];
}
}
控制台的输出是:
2012-03-28 23:11:41.799 (APPID) call:checkForHint
2012-03-28 23:11:41.800 (APPID) valueForKeyInDefaults:YES
我不明白为什么这个if语句不会返回true .. 任何能够提供帮助的人都会非常感激。我有一种感觉,因为这两个字符串是碰巧具有相同值的不同实例,但我不知道如何解决这个问题。
答案 0 :(得分:6)
操作==在这种情况下比较指针。显然,您正在比较两个不同的对象:@"YES"
这是一个文字字符串和[defaults valueForKey:@"giveHint"]
方法调用返回的对象。
如果您需要按内容比较字符串,请使用[[defaults valueForKey:@"giveHint"] isEqualToString:@"YES"]