[解決済み] NSStringインスタンスがNSArrayに含まれるかどうかをチェックする。
質問
文字列の配列を持っていて、ある文字列がその配列に含まれているかどうかを調べたいのです。もし私が
containsObject
: メッセージを使用すると、正しい結果を得ることができます。すべての
NSString
オブジェクトはすべて同じオブジェクトを指しているのでしょうか?あるいは、なぜ
containsObject
が機能しているのでしょうか?
NSArray *stringArray = [NSArray arrayWithObjects:@"1",@"2",@"3",anotherStringValue, nil];
if([stringArray containsObject:@"2"]){
//DO SOMETHING
}
どのように解決するのですか?
はい、ハードコードされた NSStrings (文字列リテラル) (つまり、任意の
@"..."
は、プロセスが実行されている間、無期限に存在する文字列に変換されます。
しかし
NSArray
's
containsObject:
メソッド呼び出し
isEqual:
を呼び出すので、そのオブジェクトに対して
であっても、動的に生成された文字列
のような
[NSString stringWithFormat:@"%d", 2]
が返されます。
YES
を返します。
これは、NSStringの
isEqual:
(正確にはその
isEqualToString:
) メソッドを実装しています。
内容認識 (ポインタの同一性比較に対して)
を返すように実装されており、その結果
YES
を返します。これは、いつどのように作成されたかに関わらず、(比較時に)全く同じ文字の並びを含む文字列のペアに対してです。
等しい (ポインターの) 同一性をチェックするには、配列を列挙し、
NSString *yourString = @"foo";
BOOL identicalStringFound = NO;
for (NSString *someString in stringArray) {
if (someString == yourString) {
identicalStringFound = YES;
break;
}
}
(これは、ほとんどの場合、望んでいないでしょうが)。
あるいはもっと便利な方法で
BOOL identicalStringFound = [stringArray indexOfObjectIdenticalTo:someString] != NSNotFound;
(これもいらない可能性が高い)。
総括する。
で、肯定的な返事をもらっている理由は
containsObject:
は
NOT
というのは、リテラル文字列は同じ定数インスタンスを共有しているからです。
しかし
というのは
containsObject:
というのは、慣習的に
isEqual:
を呼び出します。
の(短い)ドキュメントを読むとよいでしょう。
isEqual:
を
NSObject プロトコル
.
関連
-
[解決済み] Swift のプロトコル: メソッドがスーパークラスのメソッドをオーバーライドしない。
-
[解決済み] UTF-8でエンコードされたNSDataをNSStringに変換します。
-
[解決済み] iOSまたはmacOSで、インターネット接続が有効かどうかを確認するにはどうすればよいですか?
-
[解決済み] NSOrderedSetが生成するアクセサで例外が発生する。
-
[解決済み】Core Data vs SQLite 3 [終了しました。]
-
[解決済み】NSArrayを反復処理する方法は?
-
[解決済み] Objective-CでNSArrayからNSStringに変換する
-
[解決済み] CFStringRefをNSStringに変換する方法は?
-
[解決済み] NSArrayの要素をNSStringに結合するには?
-
[解決済み] EXC_BREAKPOINT(SIGTRAP)」例外はデバッグ用ブレークポイントが原因か?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Swift のプロトコル: メソッドがスーパークラスのメソッドをオーバーライドしない。
-
[解決済み] Cocoa:フレームとバウンドはどう違うの?
-
[解決済み] NSOrderedSetが生成するアクセサで例外が発生する。
-
[解決済み】Core Data vs SQLite 3 [終了しました。]
-
[解決済み】ユニットテスト内のコードでバンドルリソースを見つけられないのはなぜですか?
-
[解決済み] NSUserDefaultsにNSDateを格納する最適な方法は何ですか?
-
[解決済み] NSTextFieldにテキストを設定する方法を教えてください。
-
[解決済み] NSDateを年、月、日、時、分、秒の各スタイルにフォーマットする。
-
[解決済み] NSArrayの要素をNSStringに結合するには?
-
[解決済み] EXC_BREAKPOINT(SIGTRAP)」例外はデバッグ用ブレークポイントが原因か?