2009-09-14 14 views
4

Je suis assez nouveau à c objective et ai du mal à comprendre le message d'avertissement pour le bloc de code suivant:Objective-C Avertissement

void PrintPathInfo() { 
    NSString *path = @"~"; 
    NSString *message = @"My home folder is: "; 

    NSLog([message stringByAppendingString: [path stringByExpandingTildeInPath]]); 
} 

Ceci est le message d'avertissement que je reçois pour la dernière ligne (appel à NSLog):

warning: format not a string literal and no format arguments 

Quelqu'un peut-il clarifier? Est-ce un message d'avertissement dont je devrais me préoccuper?

Merci.

Répondre

9

Votre code devrait fonctionner très bien, mais pourrait se conduire mal s'il y « % » caractères de formatage dans le passé string- Cela pourrait dérouter NSLog. Par exemple, essayez de l'échanger dans votre code:

NSString *message = @"My home %folder is: "; 

NSLog interprétera ce '% f' de manière incorrecte.

Vous pouvez éviter l'avertissement (et le danger), en utilisant une chaîne littérale avec la mise en forme et en passant dans vos cordes, comme ceci:

NSLog(@"%@%@", message, [path stringByExpandingTildeInPath]); 

Vous pouvez également vérifier ce lien:

http://www.cocoabuilder.com/archive/message/cocoa/2009/8/29/243819

Bonne chance!

+0

Merci - c'est logique maintenant. – IUnknown

2

Si vous voulez écrire la sortie pour vous NSLog besoin de quelque chose comme ceci:

NSLog(@"My home folder is %@",[path stringByExpandingTildeInPath]);