2012-03-29 141 views
-1

可能重複:
Comparing Strings in Cocoa
Why is this code not recognising the NSString as being equal?爲什麼字符串比較返回true?

我有一個值的設定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 .. 任何人誰可以幫助將不勝讚賞。我有一種感覺,因爲兩個字符串是不同的實例,碰巧有相同的值,但我不知道如何解決這個問題。

+4

計數器的問題比較字符串:**爲什麼''==被用於*字符串* **比較搜索重複,你會發現他們..? 。在任何情況下,Objective-C *都沒有*操作符重載,這就是爲什麼'=='不能可靠地爲兩個NSObject的*值相等*工作。 – 2012-03-29 03:18:23

+0

對不起,我真的不知道要搜索什麼。有比較字符串的具體方法嗎?謝謝 – bkbeachlabs 2012-03-29 03:20:03

+0

搜索「compare nsstrring」或「equals nsstring」。 – 2012-03-29 03:20:53

回答

6

操作==在這種情況下比較指針。很明顯,您正在比較兩個不同的對象:@"YES"這是一個文字字符串,而對象是由方法調用返回的[defaults valueForKey:@"giveHint"]

如果你需要他們的內容使用[[defaults valueForKey:@"giveHint"] isEqualToString:@"YES"]

+0

謝謝。很好的回答! – bkbeachlabs 2012-03-29 05:19:02

相關問題