2011-04-18 5 views
0

Comment convertir un nombre en chaîne.Conversion incorrecte d'un nombre en chaîne

Voici mon code:

NSDictionary *myDict = [NSDictionary dictionaryWithObjectsAndKeys:@"1100", @"myKey",nil]; 

NSString *myData = [NSString stringWithFormat:@"%d", [myDict valueForKey:@"myKey"]]; 

La sortie en myData n'est pas 1100, mais un nombre aléatoire. Quel est le problème ici.

Répondre

4

Le numéro que vous stockez déjà est sous la forme d'une chaîne (notez les guillemets: @ "...").

Ce que vous voulez probablement est quelque chose comme ceci:

NSDictionary *myDict = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInteger:1100], @"myKey",nil]; 

NSString *myData = [NSString stringWithFormat:@"%d", [[myDict objectForKey:@"myKey"] integerValue]]; 

Nous allons passer par cette étape de code par étape:

  1. Nous créons un objet NSNumber tenant 1100 par [NSNumber numberWithInteger:1100]
  2. Nous créons une NSDictionary objet avec ledit objet numéro en tant que valeur pour la clé @"myKey"
  3. Nous demande la valeur pour la clé @"myKey" de myDict via [myDict objectForKey:@"myKey"], ce qui renverra l'instance NSNumber que nous lui avons passée précédemment.
  4. Nous demandons alors la valeur entière (NSInteger, qui est une abstraction autour int/long) de l'instance NSNumber reçu par [… integerValue]
  5. Nous passons la valeur NSInteger à [NSString stringWithFormat:@"%d", …]

Sinon, vous pouvez sauter l'étape 4 et changez @ "% d" en @ "% @", qui imprimera la même chose. En cas de valeurs entières simples au moins. Pour les valeurs à virgule flottante, vous ne voudrez pas imprimer NSNumbers directement via @ "% @" car vous perdriez le contrôle de l'affichage de la précision décimale.

Notez que nous utilisons objectForKey:, pas valueForKey:, voici pourquoi: https://stackoverflow.com/search?q=valueForKey%20objectForKey


Vous pourriez avoir fait la même chaîne en changeant votre code à ceci:

NSDictionary *myDict = [NSDictionary dictionaryWithObjectsAndKeys:@"1100", @"myKey",nil]; 

NSString *myData = [NSString stringWithFormat:@"%@", [myDict objectForKey:@"myKey"]]; 

La raison cependant, pourquoi ne pas vouloir faire ceci: Il est (en général) une mauvaise habitude de stocker des valeurs numériques ** (ou à peu près toutes les autres non-textuelles) comme des chaînes **.

2

%d est un spécificateur pour les valeurs entières lorsque vous insérez @"1100", qui est NSString, dans le dictionnaire.

Modifier le spécificateur avec %@ et cela fonctionnera .. ou si vous voulez placer le nombre lui-même, vous devrez l'envelopper avec un objet Obj-C (comme NSNumber) dans le dictionnaire.

0

Les deux autres réponses sont correctes, mais ...

Vous semblez vouloir:

NSDictionary *myDict = [NSDictionary dictionaryWithObjectsAndKeys:@"1100", @"myKey",nil]; 
NSString *myData = [myDict valueForKey:@"myKey"]; 

Il n'y a pas besoin de faire la danse +stringWithFormat: parce que vous stockez déjà la valeur en tant que chaîne (@"..." signifie qu'il est une chaîne).

Questions connexes