Objective-Cでの文字列比較


92

現在、SOAPを介してiPhoneアプリと通信するWebサーバーをセットアップしています。GUIDを含む文字列を返しています。これを別の文字列と比較しようとすると、奇妙な結果が得られます。

なぜこれが発火しないのですか?確かに2つの文字列は一致していますか?

NSString *myString = @"hello world";

if(myString == @"hello world")
    return;

1
スクリーンショットが消えたため、この質問はほとんど役に立たなくなりました。これが、コードを質問にコピーアンドペーストする必要がある理由です。
jscs

スクリーンショットは私が思うエラーでしたが、答えは2年前のように与えられました!
ingh.am

1
しかし、将来の読者は、エラーやコードが彼らのものと同じであるかどうかを知るために使用していたコードを見ることができません。つまり、この質問は他の誰にも役立ちません。
jscs

画像を探します。これは他の質問のリファレンスベースのようなものだと思いますが、ここで閉じても意味がありません。
ingh.am

2
なぜこの質問は閉じられているのですか?それは完全に有効な質問です!
ibz 2013

回答:


213

-isEqualToString:メソッドを使用して、2つの文字列の値を比較します。C ==演算子を使用すると、オブジェクトのアドレスが比較されます。

if ([category isEqualToString:@"Some String"])
{
    // Do stuff...
}

2
ああ!どうもありがとうございました。これはちょっとバカみたいな感じ!
ingh.am

3
私の推測では、ObjectiveC ++では、==を使用する構文上重要な機能を提供するために演算子オーバーロードを作成できますが、==は目的CオブジェクトのIDチェックにのみ使用されるため、目的の適切なCプログラマーはこれを行いません。
ウォーレンP

48

必要に応じて、大文字と小文字を区別する比較または大文字と小文字を区別しない比較を使用できます。大文字と小文字を区別すると、次のようになります。

if ([category isEqualToString:@"Some String"])
{
   // Both strings are equal without respect to their case.
}

大文字と小文字を区別しないのは次のとおりです。

if ([category compare:@"Some String" options:NSCaseInsensitiveSearch] == NSOrderedSame)
{
   // Both strings are equal with respect to their case.
}

1
([category compare:@ "Some String" options:NSCaseInsensitiveSearch] == NSOrderedSame)
JaakL

9
文字列(この場合は「category」)がnilの場合、compareは常にNSOrderedSameを返すため、「compare」関数には注意してください。
nh32rg 2013

@ nh32rgは素晴らしいポイントです。+1!isEqualToStringにも同じ問題がありますか?
badweasel 14

5

以下の関数で文字列を比較できます。

NSString *first = @"abc";
NSString *second = @"abc";
NSString *third = [[NSString alloc] initWithString:@"abc"];
NSLog(@"%d", (second == third))  
NSLog(@"%d", (first == second)); 
NSLog(@"%d", [first isEqualToString:second]); 
NSLog(@"%d", [first isEqualToString:third]); 

Output will be :-
    0
    1
    1
    1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.