Objective c 为什么不是';t字符串比较返回true?

Objective c 为什么不是';t字符串比较返回true?,objective-c,string,equals,Objective C,String,Equals,可能重复: 在NSUserDefaults中,我将一个值设置为@“是”。当我运行这个方法时 - (void) checkForHint { NSLog(@"call:checkForHint"); NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSLog(@"valueForKeyInDefaults:%@",[defaults valueForKey:@"giveHint"]);

可能重复:

在NSUserDefaults中,我将一个值设置为@“是”。当我运行这个方法时

- (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]];
    }
}
我不明白为什么这句话不是真的。。
任何能帮忙的人都将不胜感激。我有一种感觉,这是因为这两个字符串是不同的实例,恰好具有相同的值,但我不知道如何解决这个问题。

在这种情况下,Operation==正在比较指针。很明显,您正在比较两个不同的对象:
@“YES”
这是一个文本字符串,以及
[defaults valueForKey:@“giveHint”]
方法调用返回的对象


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

反问:为什么使用
==
进行字符串比较?搜索重复项,您将找到它们。。。在任何情况下,Objective-C都没有运算符重载,这就是为什么对于两个NSObject的值相等而言,
==
永远无法可靠工作的原因。抱歉,我真的不知道要搜索什么。是否有比较字符串的特定方法?感谢搜索“比较nsstring”或“等于nsstring”。感谢链接。正是我想要的
2012-03-28 23:11:41.799 (APPID) call:checkForHint
2012-03-28 23:11:41.800 (APPID) valueForKeyInDefaults:YES