2011-01-27 12 views

Respuesta

76

Como NSDictionarys solamente están diseñados para hacer frente a objetos, una forma sencilla de hacer esto es para envolver el número entero y flotar en un objeto NSNumber. Por ejemplo:

NSMutableDictionary *testDictionary = [[NSMutableDictionary alloc] init]; 
[testDictionary setObject:[NSNumber numberWithFloat:1.23f] 
        forKey:[NSNumber numberWithInt:1]]; 
NSLog(@"Test dictionary: %@", testDictionary); 

[testDictionary release]; 

para extraer el valor correspondiente, basta con utilizar el intValue apropiado, floatValue, etc. método de la clase NSNumber.

+0

Gracias middaparka ... – Ratan

+2

Me está diciendo que la clave debe ser 'NSString *', y buscar a través de 'NSKeyValueCoding.h' se ve como todos los métodos esperan cadenas. ¿Ha cambiado algo en el SDK? –

2

Tiene que ser un objeto, así que use [NSNumber numberWithInt:myInteger] en su lugar.

A continuación, recuperarlo con -integerValue

+1

El método integerValue devuelve un objeto NSInteger, no un int. :-) –

+0

Ouch, eso debería ser -intValue. Gracias middaparka – sidyll

+3

@middaparka: NSInteger no es un objeto. – EmptyStack

8

Puede usar NSMapTable ya que admite directamente las claves y/o valores enteros. No hay necesidad de box/unbox a través de NSNumber, pero también es un poco más difícil de configurar y usar.

+0

'NSMapTable' solo está disponible en iOS 6 y versiones posteriores. –

+1

NSMapTable contiene referencias débiles, que pueden ser o no lo que usted desea. Sin embargo, eso es diferente a NSDictionary. –

+0

'NSMapInsert' no está disponible en iOS. ¿Hay una mejor manera de establecer un valor entero que no sea algo como esto: '[map setObject: (__ bridge id) ((void *) myInt) forKey: myKey];'? Supongo que valueOptions se estableció en 'NSPointerFunctionsIntegerPersonality | NSPointerFunctionsOpaqueMemory'. – qix

Cuestiones relacionadas