2010-08-24 16 views
111

Antes de poner valor int en el diccionario he establecido el valor int como [NSNumber numberWithInt: 2], ahora cuando intento recuperar el contenido del diccionario, lo quiero de nuevo en int formato ... hw para hacer esto?cómo convertir NSNumber a int en Objective-C

aquí está mi código;

NSMutabelDictionary *dict = [[NSMutableDictionary alloc]init]; 
int intValue = 300; 

[dict setObject:[NSNumber numberWithInt:intValue] forKey:@"integer"]; 

retriving .........

int number = [dict ObjectForKey:@"integer"]; 

.. lanza una excepción se requiere de fundición diciendo .. cuando lo hago de esta manera ..

int number = (int)[dict ObjectForKey:@"integer"]; 

aún no funciona ...

cómo solucionar este problema?/

sugerir por favor ..

Respuesta

182

Tener un vistazo a la documentation. Utilice el método intValue:

int number = [[dict objectForKey:@"integer"] intValue]; 
+2

El nombre del método es 'objectForKey: ', not' ObjectForKey: '(hay una diferencia). – dreamlax

+0

@dreamlax: Fue un error de copiar y pegar, gracias. –

+0

La conversión implícita ahora no está permitida con ARC. – Alexander

53

Debe ajustarse a los tipos de datos NSInteger cuando sea posible. Por lo que crearía el número de esa manera:

NSInteger myValue = 1; 
NSNumber *number = [NSNumber numberWithInteger: myValue]; 

decodificación trabaja con el método integerValue a continuación:

NSInteger value = [number integerValue]; 
+0

¿Por qué debería apegarse al 'NSInteger'? –

+0

'NSInteger' es un tipo primitivo que es ** mucho ** más rápido durante la ejecución que' NSNumber' que es un objeto. –

+0

¿Y qué es 'int'? ¿Un primitivo también? –

0

Un enfoque menos detallado:

int number = [dict[@"integer"] intValue];