Coding Explorer Blog

Exploring how to code for iOS in Swift and Objective-C

  • Home
  • Apps
  • About
  • Contact

NSDictionary – Objective-C Class Reference

Last updated on June 25, 2014

Have you had a collection of objects that you want to by name?  Lets say you had an object that contains contact info for a person.  If I wanted to see the contact information for somebody, I’d want to just tell something, “Hey, give me Jimmy’s contact info”, and it would get it for me.  That is exactly what NSDictionary does for you.

NSDictionary is way to perform easy lookups for objects stored in the dictionary, via a key of some sort.  It basically stores data in something called a “key value pair”.  I will use the even simpler example of looking up the definition of a word in a standard Miriam-Webster style dictionary.  The word you are looking up is the “key.”  The definition you are trying to find for that word is the “value.”  In this post, I’ll go over some of the basics.

Creating a NSDictionary

There are many ways to create it, but I will go over some of the simpler ones here.  The first one I learned is making a NSDictionary from another NSDictionary.  You might be saying to yourself, “How is that useful when you’re learning?  Making a NSDictionary from another one means I need one in the first place!”  And you would be right, so that is what Apple gives you!

NSDictionary *wordDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
@"A friendly mammal commonly kept as a pet", @"Cat",
@"An awesome smartphone", @"iPhone",
@"An informative and helpful blog about Objective-C", @"CodingExplorer.com", nil];

Shameless self plug aside, that is a very easy way to make an initial dictionary.  You just tell the NSDictionary class to make one based off of the keys you give it.  There are a few VERY important things to know about how to use this though.

The order is Value, then Key — While my example makes it obvious, you must put the Value object first, then its associated key.  One reference I found had this backwards, which had me quite frustrated when it didn’t work.  I figured it out eventually be giving my dictionary the command [wordDictionary allKeys], which returns an NSArray of all keys, and found it was telling me the equivalent of the definitions in this example, instead of the words.

It must be terminated with nil — As far as my research has shown me, that nil at the end just says that the list of objects is complete.

A similar method is:

dictionaryWithObjects:(NSArray *)values forKeys:(NSArray *)keys

This one does the same thing, but in this case you have two NSArrays.  One filled with all values, the other with all keys, then it makes a dictionary by stepping through those.

Update 11/11/13:  I have recently learned from the Stanford iOS classes of a newer way to create an NSDictionary that is much simpler.  It’s syntax is as follows:

NSDictionary *someDictionary = @{key1 : value1, key2 :value2, …};

So this one has the order I like where it is key then value, and it is a LOT less verbose.  Also, this one does not need to be nil terminated.  If you wanted just 2 things, you would just put the  end curly brace where that last comma is.  If you wanted more ,just repeat the pattern.  Similar to how when Apple made it easy to make an NSString from a C string with the @ sign, they use it here to provide a shortcut.

Reading from a Dictionary

Now that we have something stored, how do we get it out?  While there are plenty of ways, this is the way I am currently using:

NSString *definitionOfiPhone = [wordDictionary objectForKey:@"iPhone"];

This way is pretty self explanatory, that it sends a message to the wordDictionary requesting an object associated with the key, which in this case is an NSString of “iPhone.”

Something important to note, the objects and keys can be just about anything that inherits from NSObject, which is almost anything you’ll deal with except for C primitives like int, double, etc.  For the sake of simplicity and explanation, I used an NSString for both, but you could have them as NSNumbers, or your own custom class.  The only thing they can’t be is “nil”, but you could use NSNull as a placeholder.

Update 11/11/13:  As with my above note about an easier way to make an NSDictionary, I also learned about a much easier way to ready from one.  This way is much similar to how I read them in a dictionary in C#, so it feels a lot more familiar, and again, is a lot less verbose.

NSString *definitionOfiPhone = wordDictionary[@"iPhone"];

You just basically use they key as if it were an index in an array.

Things to come?

I had a bit of trouble finding everything I wanted in one place for this, so I thought it would be helpful for others that want a 1 stop shop to learn about things.  When I was learning about C#, the website dotnetperls was invaluable to me.  I am thinking I will make some pages like this one for other classes I learn about to help in Objective-C like Dot Net Perls helped me in C#.  If you do need to learn C# for something as well, definitely check out dotnetperls.  But anyway, I hope this was helpful, I am thinking I may update these posts as I learn more, to make them references for what I learn about specific classes like this.  In other words, this is probably only the begining for this reference page, and hopefuly is the harbinger of other class references.

Filed Under: Class Reference

Subscribe to the Coding Explorer Newsletter

* indicates required

Follow Us

Facebooktwitterrss

Recent Posts

  • Error Handling in Swift
  • Creating and Modifying a URL in your Swift App
  • Watch Connectivity in Swift — Application Context
  • watchOS Hello World App in Swift
  • API Availability Checking in Swift

Categories

  • Class Reference
  • General
  • Interface Builder
  • My Apps
  • Objective-C
  • Swift
  • Syntax
  • Tutorial
  • Uncategorized

Archives

  • May 2016
  • March 2016
  • February 2016
  • December 2015
  • July 2015
  • June 2015
  • April 2015
  • February 2015
  • January 2015
  • December 2014
  • November 2014
  • October 2014
  • September 2014
  • August 2014
  • July 2014
  • June 2014
  • May 2014
  • April 2014
  • March 2014
  • January 2014
  • November 2013
  • September 2013
  • August 2013
  • July 2013
  • Terms Of Use
  • Privacy Policy
  • Affiliate Disclaimer

Subscribe to the Coding Explorer Newsletter

* indicates required

Copyright © 2025 Wayne Media LLC · Powered by Genesis Framework · WordPress