2009-06-29 5 views
4

J'ai besoin d'aide. Comment se fait cela ne fonctionne pas:iPhone: Problèmes avec la chaîne formatée (objectif C)

NSProcessInfo *process = [NSProcessInfo processInfo]; 
NSString *processName = [process processName]; 
int processId = [process processIdentifier]; 
NSString *processString = [NSString stringWithFormat:@"Process Name: @% Process ID: %f", processName, processId]; 
NSLog(processString); 

Mais cela ne:

NSLog(@"Process Name: %@ Process ID: %d", [[NSProcessInfo processInfo] processName], [[NSProcessInfo processInfo] processIdentifier]); 

Répondre

14
  • %@: sortie de la forme de chaîne d'un objet (y compris NSString).
  • %f: sortie d'un nombre à virgule flottante (float)
  • %d: sortie un nombre entier (int)
  • %x: forme hexadécimale Sortie d'un nombre

Votre NSString:stringWithFormat: original avait deux problèmes:

  1. @% doit être %@ t o sortir un NSString.
  2. Vous utilisez %f au lieu de %d pour générer un int.
+0

+1 La meilleure réponse. Puisque @% n'est pas un formateur valide, il rejettera la chaîne de format, et vous risquez de tenter (sans le savoir) d'imprimer le NSString sous forme de nombre à virgule flottante. Les chances sont que vous connaissez les spécificateurs de format et ce n'est qu'une simple erreur. Une bonne référence d'Apple pour ceci est ici: http://developer.apple.com/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html –

2

Votre chaîne de format est mauvaise: processId est un entier non un flotteur.

Utilisez -Wformat pour vous débarrasser de ce type d'erreur.

+0

oh! merci comment activer -wformat dans xcode? – Devoted

+0

Il existe un paramètre pour cela dans le volet des paramètres de la cible. Je ne me souviens pas du nom, mais je suppose que vous le trouverez facilement en cherchant dans ce volet. –

+0

Dans Xcode, -Wformat apparaît comme "Typecheck Calls to printf/scanf". Cependant, l'int sera très bien upcast, et même si ce n'est pas ce qui est prévu, le problème sera facile à repérer. Le vrai problème est le formateur pour NSString - @drewh a la bonne réponse. –

0

Votre format contient une erreur, vous avez échangé le @ et % pour le [NSString stringWithFormat:]. Cela fonctionnera pour le journal mais pas pour la création de chaîne, car le format est %@ et non @%.

Questions connexes