Storing ints in a Dictionary
Asked Answered
L

3

13

As I understand, in Objective-C you can only put Objects into dictionaries. So if I was to create a dictionary, it would have to have all objects. This means I need to put my ints in as NSNumber, right?

SOo...

NSNumber *testNum = [NSNumber numberWithInt:varMoney];


NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setObject:@"OMG, Object 1!!!!" forKey:@"1"];
[dictionary setObject:@"Number two!" forKey:@"2"];
[dictionary setObject:testNum forKey:@"3"];


NSNumber *retrieved = [dictionary objectForKey:@"3"];
int newVarMoney = [retrieved intValue];

Where varMoney is an int that has been declared earlier. My question is, is there a better way to store "int" in a dictionary than putting it into a NSNumber?

Thanks!

Edit: 04/25/13

It's been a long time since I asked this question. For people stumbling on it in the future, there are easier ways to do this with the Apple LLVM Compiler 4.0, which has been default in Xcode for a bit. (ARC)

NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
[dictionary setObject:@1337 forKey:@"1"];

That's it, use the @1337 Syntax to quickly create NSNumber objects. Works with Variables, so my above could become:

[dictionary setObject:@(varMoney) forKey:@"3"];

or

dictionary[@"mykey"] = @1337;

Simpler.

Limber answered 10/11, 2009 at 1:12 Comment(1)
You can also do dictionary[@"1"] = @1337;Angleaangler
U
18

You are correct, NSNumber is the normal way to handle this situation. You can use NSValue or NSDecimalNumber, too.

Undulant answered 10/11, 2009 at 1:13 Comment(1)
That's okay, I didn't think there was, so now I know. Thank you!Limber
C
5

If you are prepared to fall back to using Core Foundation (CFDictionaries) you can store anything you like. I've definitely made dictionaries into which I put arbitrary void* values.

You need to do a little more plumbing but not much, and its all documented.

Carbohydrate answered 10/11, 2009 at 3:1 Comment(0)
S
0

Sorry but no :( Not as far as I know. Reason being that integers aren't objects, and NSDictionary only stores objects.

Springhouse answered 10/11, 2009 at 1:14 Comment(1)
That's okay, I didn't think there was, so now I know. Thank you!Limber

© 2022 - 2024 — McMap. All rights reserved.