2009-07-09 8 views
60

J'essaie de convertir d'un int à une chaîne, mais j'ai des problèmes. J'ai suivi l'exécution via le débogueur et la chaîne 'myT' obtient la valeur de 'sum' mais l'instruction 'if' ne fonctionne pas correctement si la 'somme' est 10,11,12. Ne devrais-je pas utiliser un type int primitif pour stocker le numéro? De plus, les deux méthodes que j'ai essayées (voir le code commenté) échouent à suivre le vrai chemin de l'instruction 'if'. Merci!Comment convertir de int en chaîne dans l'objectif c: exemple code

int x = [my1 intValue]; 
    int y = [my2 intValue]; 
    int sum = x+y; 
    //myT = [NSString stringWithFormat:@"%d", sum]; 
    myT = [[NSNumber numberWithInt:sum] stringValue]; 

    if([email protected]"10" || [email protected]"11" || [email protected]"12") 
     action = @"numGreaterThanNine"; 
+6

Y at-il une raison que vous mettez l'entier dans une chaîne? Il serait tellement plus facile d'écrire votre test que si (somme> = 10 && somme <= 12) ' – Alex

+1

Si les réponses ci-dessous vous rendent confus, consultez cette question: http://stackoverflow.com/questions/3414644/comment-convertir-entier-en-chaîne-en-objectif-c-fermé – Florin

Répondre

30

La version commentée est la meilleure façon de procéder. Si vous utilisez l'opérateur == sur des chaînes, vous comparez les adresses des chaînes (où elles sont allouées en mémoire) plutôt que les valeurs des chaînes. Ceci est très occasionnelle utile (il indique que vous avez le même objet chaîne exacte), mais 99% du temps que vous souhaitez comparer les valeurs, que vous faites comme ceci:

if([myT isEqualToString:@"10"] || [myT isEqualToString:@"11"] || [myT isEqualToString:@"12"]) 
+0

Légère faute de frappe, un manque: dans la 2ème comparaison. – marcc

12

== ne doit pas être utilisé pour comparer des objets dans votre if. Pour NSString, utilisez isEqualToString: pour les comparer.

156

Si vous avez juste besoin d'un int une chaîne comme vous le suggérez, j'ai trouvé la meilleure façon est de faire comme ci-dessous:

[NSString stringWithFormat:@"%d",numberYouAreTryingToConvert] 
6
int val1 = [textBox1.text integerValue]; 
int val2 = [textBox2.text integerValue]; 

int resultValue = val1 * val2; 

textBox3.text = [NSString stringWithFormat: @"%d", resultValue]; 
136

vous pouvez utiliser littéraux, il est plus compact.

NSString* myString = [@(17) stringValue]; 

(encadrés comme NSNumber et utilise sa méthode stringValue)

+3

@RavindranathAkila - 'stringWithFormat' est plus flexible/puissant et devrait être utilisé en général. Ceci est juste un raccourci si c'est une conversion simple que vous recherchez. – Robert

+0

Merci. En effet, je cherchais une approche non verbeuse :-) –

3

convertir simplement int à NSString utilisation:

int x=10; 

    NSString *strX=[NSString stringWithFormat:@"%d",x]; 
Questions connexes