为什么字符串比较不返回true?

bkb*_*abs -1 string equals objective-c

可能重复:
比较Cocoa中的字符串
为什么这段代码不能识别NSString是否相等?

我在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]];
    }
}
Run Code Online (Sandbox Code Playgroud)

控制台的输出是:

2012-03-28 23:11:41.799 (APPID) call:checkForHint
2012-03-28 23:11:41.800 (APPID) valueForKeyInDefaults:YES
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这个if语句不会返回true ..任何可以提供帮助的人都会非常感激.我有一种感觉,因为这两个字符串是碰巧具有相同值的不同实例,但我不知道如何解决这个问题.

Dav*_*eyl 6

Operation ==正在比较这种情况下的指针.显然,您正在比较两个不同的对象:@"YES"它是一个文字字符串和[defaults valueForKey:@"giveHint"]方法调用返回的对象.

如果您需要按内容使用比较字符串 [[defaults valueForKey:@"giveHint"] isEqualToString:@"YES"]