2012-03-29 25 views
-1

可能性の重複:
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]]; 
    } 
} 

です:私は助けることができるこの文イマイチが戻っている場合はtrue .. 誰もがそれが大幅になぜ理解しない

2012-03-28 23:11:41.799 (APPID) call:checkForHint 
2012-03-28 23:11:41.800 (APPID) valueForKeyInDefaults:YES 

感謝。 2つの文字列が同じ値を持つ異なるインスタンスであるため、私はその感情を持っていますが、これを修正する方法はわかりません。

+4

カウンタ疑問使用し、その内容によって文字列を比較する必要がある場合は?:**なぜ '==' *文字列のために使用されている*比較**重複を検索し、あなたがそれらを見つけるでしょう。..どちらの場合でもObjective-C *には演算子のオーバーロードがありません。そのため、2つのNSObjectの* value equality *に対して確実に動作しない '=='があります。 –

+0

申し訳ありません本当に何を検索するのか分かりません。文字列を比較する特定の方法はありますか? thanks – bkbeachlabs

+0

"compare nsstrring"または "equals nsstring"を検索してください。 –

答えて

6

操作==この場合のポインタを比較しています。明らかに、2つの異なるオブジェクトを比較しています。@"YES"はリテラル文字列で、[defaults valueForKey:@"giveHint"]メソッド呼び出しによって返されたオブジェクトです。

あなたは[[defaults valueForKey:@"giveHint"] isEqualToString:@"YES"]

+0

ありがとう。素晴らしい答え! – bkbeachlabs

関連する問題