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