Check key exists in NSDictionary

29down votefavorite


how can I check if this exists?:

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

I want to know whether this key exists or not. How can I do that?

Thank you very much ūüôā

EDIT: dataArray has Objects in it. And these objects are NSDictionaries.

iphone ios nsdictionary
share|improve this question
edited¬†Jan 8 ’11 at 17:26
asked¬†Jan 8 ’11 at 17:21
Any reason why you‚Äôre using¬†-valueForKey:¬†instead of¬†-objectForKey:? The former is used in key-value coding and is slightly slower than the latter.¬†‚Äst¬†Bavarious¬†Jan 8 ’11 at 17:53

add comment

3 Answers

up vote54down voteaccepted

I presume that [dataArray objectAtIndex:indexPathSet.row] is returning an NSDictionary, in which case you can simply check the result of valueForKey against nil.

For example:

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

else {
    // No joy...

share|improve this answer
answered¬†Jan 8 ’11 at 17:24
thanks. but so easy? I thought I must do some difficult things. lol¬†‚Äst¬†cocos2dbeginner¬†Jan 8 ’11 at 17:54
+1 returning your vote on my answer to you.¬†‚Äst¬†BoltClock‚ô¶¬†Jan 8 ’11 at 18:07

add comment

up vote18down vote

Check if it’s nil:

if ([[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] != nil) {
    // SetEntries exists in this dict
} else {
    // No SetEntries in this dict
share|improve this answer
answered¬†Jan 8 ’11 at 17:23
hmm you just made a the excatly same answer like middaparka.¬†‚Äst¬†cocos2dbeginner¬†Jan 8 ’11 at 17:55
@cocos2dbeginner Pretty sure @BoltClock beat me to it actually.¬†‚Äst¬†middaparka¬†Jan 8 ’11 at 17:56
+1 For the guilt. ūüėȬ†‚Äst¬†middaparka¬†Jan 8 ’11 at 17:56
@cocos2dbeginner: Yeah I was first to answer. Doesn’t matter whose gets accepted though.¬†‚Äst¬†BoltClock‚ô¶Jan 8 ’11 at 17:58
@cocos2dbeginner: If “He” refers to me, you’re right.¬†‚Äst¬†BoltClock‚ô¶¬†Jan 8 ’11 at 18:08

show 2 more comments

up vote18down vote

So I know you already selected an answer, but I found this to be rather useful as a category onNSDictionary. You start getting into efficiency at this point with all these different answers. Meh…6 of 1…

- (BOOL)containsKey: (NSString *)key {
     BOOL retVal = 0;
     NSArray *allKeys = [self allKeys];
     retVal = [allKeys containsObject:key];
     return retVal;
share|improve this answer
edited¬†Oct 26 ’12 at 22:11
answered¬†Oct 26 ’12 at 19:16
Miles Alden
I also wrote the same method in my category, but I have a weird crash happened when I use UIImageWriteToSavedPhotosAlbum(). after narrow down, I change the method name from containsKey => hasKey and the crash disappeared¬†‚Äst¬†79bxh9b¬†Sep 6 ’13 at 17:07¬†
This is much better than the accepted answer. I want to search by a key and not if the value of the key is nil or not. You could have a key in a dictionary that points to a nil value. Yet the key exists. The accepted answer doesn’t cover this scenario. But this solution here does.¬†‚Äst¬†Hooman¬†Oct 30 ’13 at 11:21
@Hooman: Not true about a key having a value of nil: the second paragraph of the NSDictionary documentation (‚Ķ) states that “Neither a key nor a value can be nil; if you need to represent a null value in a dictionary, you should use NSNull.” Both this and the accepted answer work for your scenario, i.e. with a dictionary where a value for some key is null (of type NSNull).¬†‚Äst¬†Jarno Lamberg¬†Jan 12 at 10:52

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s