web-dev-qa-db-ja.com

Cocoa / Objective-C-キーがNSDictionaryに存在するかどうかを確認します

キーがNSDictionaryに存在するかどうかを確認するにはどうすればよいですか?

コンテンツが含まれているかどうかを確認する方法は知っていますが、動的であり、防止する必要があるため、コンテンツが含まれているかどうかを確認したいと思います。場合によっては、「名前」と値を持つキーが存在する可能性がありますが、別の場合には、この値のペアが存在しない可能性があります。

11
fabio santos

最も簡単な方法は次のとおりです。

[dictionary objectForKey:@"key"] != nil

辞書は存在しないキーに対してnilを返すため(したがって、辞書にnilを格納することはできません。そのため、NSNullを使用します)。

編集:ブラッドリーの回答に対するコメントへの回答

あなたはさらに尋ねます:

これを確認する方法はありますか:[[[contactDetailsDictionary objectForKey:@ "professional"] objectForKey:@ "CurrentJob"] objectForKey:@ "Role"]が存在しますか?は非常に巨大な辞書であるため、単一のキーではなく、別のカテゴリに存在する可能性があります。

Objective-Cでは、メッセージをnilに送信できますが、これはエラーではなく、nilを返すため、上記の単純なメソッドを拡張すると、次のように記述されます。

[[[contactDetailsDictionary objectForKey:@"professional"] 
                              objectForKey:@"CurrentJob"] 
                                objectForKey:@"Role"] != nil

キーシーケンスのいずれかの部分が存在しないかのように、LHSはnilを返します

21
CRD

NSDictionaryはすべてのキーをNSArrayとして返し、配列でcontainsObjectを使用します。

NSDictionary* dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"object", @"key"];
if ([[dictionary allKeys] containsObject:@"key"]) {
  NSLog(@"'key' exists.");
}
7
Bradley M Handy