检查密钥存在于NSDictionary中

时间:2011-01-08 17:21:37

标签: ios objective-c iphone nsdictionary

如何检查是否存在?:

[[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"]

我想知道这个密钥是否存在。我怎么能这样做?

非常感谢:)

修改: dataArray中包含对象。这些对象是NSDictionaries。

9 个答案:

答案 0 :(得分:155)

我认为[dataArray objectAtIndex:indexPathSet.row]正在返回NSDictionary,在这种情况下,您只需检查valueForKeynil.的结果

例如:

if ([[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] != nil) {
    // The key existed...

}
else {
    // No joy...

}

答案 1 :(得分:46)

所以我知道你已经选择了答案,但我发现这在NSDictionary上作为一个类别非常有用。在这一点上,您开始通过所有这些不同的答案开始提高效率。嗯... 6 of 1 ...

- (BOOL)containsKey: (NSString *)key {
     BOOL retVal = 0;
     NSArray *allKeys = [self allKeys];
     retVal = [allKeys containsObject:key];
     return retVal;
}

答案 2 :(得分:34)

检查它是否为零:

if ([[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] != nil) {
    // SetEntries exists in this dict
} else {
    // No SetEntries in this dict
}

答案 3 :(得分:8)

这也可以使用以下语法使用Objective-C文字:

NSDictionary *dict = @{ @"key1" : @"value1", @"key2" : @"value2" };
if (dict[@"key2"])
NSLog(@"Exists");
else
NSLog(@"Does not exist");

答案 4 :(得分:0)

if ((NSNull *)[[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] != nil) {
    // SetEntries exists in this dict
} else {
    // No SetEntries in this dict
}

这是正确答案。

答案 5 :(得分:0)

试试这个:

if ([dict objectForKey:@"bla"]) {
   // use obj
} else {
   // Do something else like create the object
}

答案 6 :(得分:0)

这个做的相同,但代码较少:

if (dataArray[indexPathSet.row][@"SetEntries"] != nil) { /* the key exists */        } 
else                                                   { /* the key doesn't exist */ }

答案 7 :(得分:0)

检查字典包含任何值。我更喜欢[dic allKeys] .count> 0来检查。

答案 8 :(得分:0)

使用(unsigned long)选项:

if ( (unsigned long)[[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] ) {
    // Key exist;
}else{
    // Key not exist;
};