2009-07-09 13 views

Répondre

240

Il est la méthode d'instance description, a déclaré que:

- (NSString *)description 

Voici un exemple d'implémentation (grâce à grahamparks):

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

Notez que si vous utilisez CoreData, la propriété 'description' [est réservée] (http://stackoverflow.com/questions/4717519/why-cant-i-use- description-as-an-attribute-name-for-a-core-data-entity) ... et fournira des informations de débogage utiles! Dans ce cas, vous devrez créer votre propre nom de méthode. – Nuthatch

+0

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

24

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

- (NSString *)description 

Sur le sujet de l'exploitation forestière, je recommande ce blog post pour une meilleure exploitation forestière en Objective-C.

+4

est-ce pas une méthode statique? Je voudrais que cela opère sur des objets plutôt que sur la classe. Par exemple, si j'ai une classe "Photo", avec les champs "nom" et "auteur", je voudrais que NSLog imprime ces champs comme ils sont assignés dans l'objet. –

+2

Oui - bien repéré - J'ai appuyé sur la mauvaise touche. Je devrais clairement faire plus attention lorsque je lis mes réponses. Heureusement, quelqu'un a eu l'œil sur la balle :-) – teabot

34

Ajouter ceci au @implementation de votre classe Photo:

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

Il y a deux fonctions que vous pouvez se.

- (NSString*)description 

Ceci sera affiché lorsque vous placerez votre objet sous la forme, I.E. un paramètre pour NSLog. L'autre fonction de la description est:

- (NSString*)debugDescription 

Ce sera appelée quand vous faites po anInstanceOfYourClass dans la fenêtre de commande de débogage. Si votre classe n'a pas de fonction debugDescription, alors description sera appelée.

Notez que la classe de base NSObject a implémenté description, mais il est assez bare-bones: il affiche uniquement l'adresse de l'objet. C'est pourquoi je recommande que vous implémentez description dans n'importe quelle classe dont vous voulez obtenir des informations, surtout si vous utilisez la méthode description dans votre code. Si vous utilisez description dans votre code, je vous suggère d'implémenter également debugDescription, rendant également debugDescription plus verbeux.

1

Affichera les voix disponibles:

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