Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

iOS Object-Oriented Objective-C Memory, Arrays and Loops, Oh My! Review Dictionaries and Arrays

Mia Pivirotto
Mia Pivirotto
5,557 Points

How to add items from an array into a mutable dictionary?

From the beginning was:

  1. Create an NSArray called 'shoeOrder' and give the array the following four elements, in the following order: @"Charles Smith", @(9.5), @"loafer", @"brown". Be sure to use the literal syntax. NSArray *shoeOrder = @[@"Charles Smith", @(9.5), @"loafer", @"brown"];

  2. It looks like we actually want this information in a dictionary, rather than an array. Create an empty NSMutableDictionary called 'shoeOrderDict'. NSMutableDictionary *shoeOrderDict = [[NSMutableDictionary alloc] init];

  3. Now add the values in our array to our new dictionary. The keys for the values should be: 'customer', 'size', 'style' and 'color'. The values in the original array are in the same order as the keys listed above. (Note: Don't set the values directly as strings, but rather use something like 'objectAtIndex' to reference the original array.)

And I am stuck on the adding the values from my array into my new dictionary. What am I doing wrong?

variable_assignment.mm
NSArray *shoeOrder = @[@"Charles Smith", @(9.5), @"loafer", @"brown"];

NSMutableDictionary *shoeOrderDict = [[NSMutableDictionary alloc] initwithObjectAtIndex: @[shoeOrder objectAtIndex: 0], @"customer", @[shoeOrder objectAtIndex: 1], @"size", @[shoeOrder objectAtIndex: 2], @"style", @[shoeOrder objectAtIndex: 3], @"color"];

First, you need to keep the empty dictionary as it is, then set a value for each key.

[shoeOrderDict setObject:[shoeOrder objectAtIndex:0] forKey:@"customer"];
[shoeOrderDict setObject:[shoeOrder objectAtIndex:1] forKey:@"size"];
[shoeOrderDict setObject:[shoeOrder objectAtIndex:2] forKey:@"style"];
[shoeOrderDict setObject:[shoeOrder objectAtIndex:3] forKey:@"color"];