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

时间:2012-03-29 03:16:50

标签: objective-c string equals

  

可能重复:
  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 .. 任何能够提供帮助的人都会非常感激。我有一种感觉,因为这两个字符串是碰巧具有相同值的不同实例,但我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:6)

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

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