174 votes

Quelle est l'équivalent Objective-C de "toString()", à utiliser avec NSLog?

Y a-t-il une méthode que je peux remplacer dans mes classes personnalisées afin que lorsque

      NSLog(@"%@", myObject) 

est appelé, il affichera les champs (ou ce que je juge important) de mon objet ? Je suppose que je recherche l'équivalent en Objective-C de toString() en Java.

256voto

zakovyrya Points 5403

C'est la méthode d'instance description, déclarée comme suit :

- (NSString *)description

Voici un exemple d'implémentation (merci à grahamparks) :

- (NSString *)description {
   return [NSString stringWithFormat: @"Photo: Name=%@ Author=%@", name, author];
}

6 votes

Note si vous utilisez CoreData, la propriété description est réservée ...et fournira des informations de débogage utiles! Dans ce cas, vous devrez trouver votre propre nom de méthode unique.

0 votes

Est-ce que debugDescription est également réservé ? Bien que je pense que DebugDescription est censé être utilisé par un débogueur comme LLDB.

37voto

grahamparks Points 10187

Ajoutez ceci à l'implémentation de votre classe Photo :

- (NSString *)description {
   return [NSString stringWithFormat:@"Photo : Nom=%@ Auteur=%@",nom,auteur];
}

25voto

teabot Points 7711

Vous pouvez remplacer la méthode de description de NSObject:

- (NSString *)description

En ce qui concerne le journalisation, je recommande ce blog post pour une meilleure journalisation en Objective-C.

4 votes

N'est-ce pas une méthode statique? Je voudrais que cela fonctionne sur des objets plutôt que sur la classe. Par exemple, si j'ai une classe "Photo", avec les champs "nom" et "auteur", j'aimerais que NSLog affiche ces champs tels qu'ils sont assignés dans l'objet.

2 votes

Oui - bien vu - j'ai appuyé sur la mauvaise touche. Je devrais clairement faire plus attention lorsque je relis mes réponses. Heureusement, quelqu'un avait l'œil sur la balle :-)

13voto

MaddTheSane Points 452

Il y a deux fonctions que vous pouvez utiliser.

- (NSString*)description

Ceci sera affiché lorsque vous mettez votre objet en tant que paramètre pour NSLog. L'autre fonction de description est:

- (NSString*)debugDescription

Ceci sera appellé lorsque vous faites po uneInstanceDeVotreClasse dans la fenêtre de commande de débogage. Si votre classe n'a pas de fonction debugDescription, alors seule la fonction description sera appellée.

Notez que la classe de base NSObject a bien une implémentation de description, mais elle est assez basique : elle affiche seulement l'adresse de l'objet. C'est pourquoi je recommande d'implémenter description dans toute classe dont vous voulez obtenir des informations, surtout si vous utilisez la méthode description dans votre code. Si vous utilisez la méthode description dans votre code, je vous suggère d'implémenter également debugDescription, en rendant également debugDescription plus verbeux.

1voto

grigb Points 352

Cela affichera les voix disponibles :

    NSLog((@"speechVoices:%", [[AVSpeechSynthesisVoice speechVoices] description] ));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X