2009-07-09 2 views

Antwort

240

Es ist die description Instanzmethode, erklärt wie:

- (NSString *)description 

Hier ist ein Beispiel-Implementierung (dank grahamparks):

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

Hinweis: Wenn Sie CoreData verwenden, ist die 'description' Eigenschaft [reserviert] (http://stackoverflow.com/questions/4717519/why-canti-i-use-) description-as-a-attribute-name-für-ein-core-daten-entity) ... und liefert nützliche Debugging-Informationen! In diesem Fall müssen Sie Ihren eigenen eindeutigen Methodennamen erstellen. – Nuthatch

+0

Ist 'debugDescription' auch reserviert? Obwohl ich denke, 'DebugDescription' soll von einem Debugger wie LLDB verwendet werden. – MaddTheSane

24

Sie können die Beschreibung Methode von NSObject außer Kraft setzen:

- (NSString *)description 

Zum Thema Logging empfehle ich diese blog post für eine bessere Protokollierung in Objective-C.

+4

Ist das nicht eine statische Methode? Ich möchte, dass dies auf Objekte und nicht auf die Klasse angewendet wird. Wenn ich zum Beispiel eine Klasse "Photo" mit den Feldern "name" und "author" habe, möchte ich, dass NSLog diese Felder so druckt, wie sie im Objekt zugewiesen sind. –

+2

Ja - gut entdeckt - ich habe den falschen Schlüssel gedrückt. Ich sollte beim Lesen meiner Antworten deutlich mehr Aufmerksamkeit schenken. Zum Glück hatte jemand den Ball im Auge :-) – teabot

34

hinzufügen Zu den @implementation Ihrer Fotoklasse:

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

Es gibt zwei Funktionen, die Sie können se.

- (NSString*)description 

Dies wird angezeigt, wenn Sie Ihr Objekt als, I.E. ein Parameter für NSLog. Die andere Beschreibung Funktion ist:

- (NSString*)debugDescription 

Diese aufgerufen wird, wenn Sie po anInstanceOfYourClass im Debug-Befehlsfenster tun. Wenn Ihre Klasse keine debugDescription Funktion hat, wird nur description aufgerufen.

Beachten Sie, dass die Basisklasse NSObjectdescription implementiert, aber es ist ziemlich nackt: es zeigt nur die Adresse des Objekts. Deshalb empfehle ich, dass Sie description in jeder Klasse implementieren, von der Sie Informationen erhalten möchten, insbesondere wenn Sie in Ihrem Code die Methode description verwenden. Wenn Sie description in Ihrem Code verwenden, schlage ich vor, dass Sie auch debugDescription implementieren und auch debugDescription ausführlicher machen.

1

Dies wird geben die verfügbaren Stimmen:

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