2010-08-24 5 views
111

Avant de mettre la valeur int dans le dictionnaire, j'ai défini la valeur int comme [NSNumber numberWithInt: 2], maintenant quand je tente de récupérer le contenu du dictionnaire, je le veux revenir en int format .. hw pour le faire ??comment convertir NSNumber en int dans Objective-C

voici mon code;

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

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

retriving .........

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

.. il jette une exception sayin coulée est nécessaire .. quand je le fais de cette façon ..

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

stil ça ne marche pas ...

comment résoudre ce problème?/

s'il vous plaît suggérer ..

Répondre

182

Jetez un oeil à la documentation. Utilisez la méthode intValue:

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

Le nom de la méthode est 'objectForKey: ', pas' ObjectForKey: '(il y a une différence). – dreamlax

+0

@dreamlax: Était une erreur de copier-coller, merci. –

+0

La conversion implicite est désormais interdite avec ARC. – Alexander

53

Vous devez en tenir aux types de données NSInteger lorsque cela est possible. Donc, vous voulez créer le nombre comme ça:

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

Décodage travaille avec la méthode integerValue alors:

NSInteger value = [number integerValue]; 
+0

Pourquoi devrait-il s'en tenir au 'NSInteger'? –

+0

'NSInteger' est un type primitif qui est ** beaucoup plus rapide pendant l'exécution que 'NSNumber' qui est un objet. –

+0

Et qu'est-ce que 'int'? Une primitive aussi? –

0

Une approche moins détaillée:

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