Cocoa / Objective-C - 验证NSDictionary上是否存在密钥

时间:2012-10-26 16:30:54

标签: ios objective-c cocoa nsdictionary

如何验证NSDictionary上是否存在密钥?

我知道如何验证它是否有某些内容,但是如果它存在的话我想要非常好,因为它是动态的,我必须阻止它。就像在某些情况下,它可能碰巧有一个带有“名称”的键并且是值,但在另一种情况下,可能会发生这对值不存在。

2 个答案:

答案 0 :(得分:20)

最简单的方法是:

[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

答案 1 :(得分:7)

NSDictionary将所有密钥作为NSArray返回,然后在阵列上使用containsObject

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