2011-08-06 13 views
18

私のアプリでは、特定の時点で2つのNSStringが同じことをする必要があるメカニズムがあります。私が2つを比較するとき何らかの理由で、彼らが同じであっても、それはまだそれを認識しません。コードはこのようなものである:、2つのNSStringsを比較します

NSString * aString = [self someMethodThatGetsAString]; 

NSString * bString; 

BOOL areStringsTheSame = NO; 

while (areStringsTheSame != YES) { 

     bString = [self someMethodThatTakesNSStringsFromAnArrey]; 
     if (bString == aString) { 
      areStringsTheSame = YES; 
     { } 

私もNSLog()を挿入し、ある時点で、彼らは同じであった(と私の知る限り、これは...の略==何である)ことを確認しましたが、それでもBOOLの値を変更するにはifには入りませんでした。

この比較を行う別の方法はありますか?何か不足していますか?

答えて

72

あなたは方法isEqualToString:使用することができます。

if ([bString isEqualToString:aString]) 

==は、参照文字列(のアドレス)、およびでない文字列の値を比較します。

+2

#define ZERO_WIDTH_SPACE_STRING @"\u200B" 

は、あなたが比較する前に、ゼロ幅空白文字から、あなたの文字列をきれいにする必要があり、これを克服するには真実。 OOPの原則を掘り下げる(同じプロパティを持つ2つのオブジェクトは必ずしも同じオブジェクトである必要はありません)。さもなければ、あなたは開発者の生活の毎日この問題に遭遇するだろう:-) – vstrien

+0

Objective-Cが文字列変数を使う方法のために、 '=='は大文字と小文字を区別して比較することができます。例えば、文字列Aと文字列Bを宣言し、 '=='を実行すると、それらは同じアドレスに格納されています。 –

2

最近、私はNSLogでお互いに似ている2つのNSStringが異なるかもしれないという事実に衝撃を受けました。これは、NSStringにゼロ幅の空白文字が含まれることがあるためです。それを認識し、考慮してください。

NSMutableString *eMailToAdd = [NSMutableString string]; 

NSMutableCharacterSet *charSet = [[NSCharacterSet whitespaceCharacterSet] mutableCopy]; 
    //[charSet formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]]; 

    NSString *rawStr = [[tokenField textField] text]; 
    for (int i = 0; i < [rawStr length]; i++) 
    { 
     if (![charSet characterIsMember:[rawStr characterAtIndex:i]]) 
     { 
      [eMailToAdd appendFormat:@"%@",[NSString stringWithFormat:@"%c", [rawStr characterAtIndex:i]]]; 
     } 
    } 
3

このアプローチは、私の仕事::

if ([firstString compare:secondString] == NSOrderedSame) { 
    //Do something when they are the same 
} else { 
    //Do something when they are different 
}