2009-11-10 24 views
13

Según tengo entendido, en Objective-C solo puedes poner objetos en diccionarios. Entonces, si tuviera que crear un diccionario, tendría que tener todos los objetos. Esto significa que necesito poner mis datos como NSNumber, ¿verdad?Almacenar ints en un diccionario

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]; 

Dónde varMoney es un entero que se ha declarado anteriormente. Mi pregunta es, ¿hay una mejor manera de almacenar "int" en un diccionario que colocarlo en un NSNumber?

Gracias!

edición: 04/25/13

Ha sido un largo tiempo desde que hice esta pregunta. Para las personas que lo encuentren en el futuro, hay maneras más fáciles de hacerlo con el Apple LLVM Compiler 4.0, que ha sido predeterminado en Xcode por un tiempo. (ARC)

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

Eso es todo, utilice la sintaxis @ 1337 para crear rápidamente objetos NSNumber. Trabaja con variables, por lo que mi anterior podría llegar a ser:

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

o

dictionary[@"mykey"] = @1337; 

más simple.

+2

también se puede hacer el diccionario [@ "1"] = @ 1337; – JuJoDi

Respuesta

18

Está en lo cierto, NSNumber es la manera normal de manejar esta situación. También puede usar NSValue o NSDecimalNumber.

+1

Está bien, no pensé que existiera, así que ahora lo sé. ¡Gracias! –

0

Lo sentimos, pero no :(No es por lo que yo sé. La razón es que los enteros no son objetos, y NSDictionary sólo almacena objetos.

+0

Está bien, no pensé que existiera, así que ahora lo sé. ¡Gracias! –

5

Si usted está dispuesto a caer de nuevo a usar Fundación Core (CFDictionaries) se puede almacenar lo que quieras. definitivamente, he hecho los diccionarios en los que he puesto * valores nulos arbitrarias.

Es necesario hacer un poco más de fontanería, pero no mucho, y es todo documentado.