2012-10-26 1 views
10

NSDictionaryにキーが存在するかどうかを確認するにはどうすればよいですか?Cocoa/Objective-C - NSDictionaryにキーが存在するかどうかを確認します

コンテンツがあるかどうかを確認する方法はわかりましたが、動的であり、防止する必要があるため、コンテンツがある場合は非常にしたいです。いくつかの場合のように、「名前」と値を持つキーが存在することもありますが、別のケースでは、この値のペアが存在しないことがあります。

答えて

17

最も簡単な方法です。

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

あなたがさらに尋ねる:

かどうかを確認する方法はありますこの:[[[contactDetailsDictionary objectForKey: "プロ"] objectForKey @: @ "CurrentJob"] objectForKey:@ "Role"]は存在しますか?本当に巨大な辞書なので、単一のキーではないので、別のカテゴリに存在する可能性があります。あなただけ書く上のObjective-Cでは

あなたはとても簡単な方法を拡大し、それは誤りではないとnilを返し、nilにメッセージを送ることができます。

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

のどの部分かのようにLHS存在しないキーシーケンスを検証する方法はあり

+1

連鎖検索の場合は、KVC: '[contactDetailsDictionary valueForKeyPath:@" professional.CurrentJob.Role "]'を使用することもできます。 –

+0

コードの第1行に小さなタイプミスがあります。メソッド名は 'objectForkey'ではなく' objectForKey'です。 – jamix

+0

@jamix - ありがとう、修正されました。 – CRD

6

NSDictionaryはすべてのキーをNSArrayとして返し、containsObjectを配列に返します。辞書は非existantキーのnilを返す

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

として(そして、あなたはそれゆえ、そのためにあなたがNSNullを使用し、辞書にnilを格納することはできません):

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

nilを返す場合、この: [[[contactDetailsDictionary objectForKey:] "プロ" objectForKey @:objectForKey] "CurrentJob" @:@ "役割"] ] が存在しますか?本当に巨大な辞書なので、単一のキーではないので、別のカテゴリに存在する可能性があります。 –

+0

'NSDictionary'を返すメソッドの代わりに' dictionary'を置き換えます。 –

+0

メソッドが同じものを返す場合は、その必要性は何ですか?たぶんそれはノブの質問ですが、私はフロントエンドから来て、Objective Cは私をゆっくりと殺しています:P –

関連する問題