2009-07-09 7 views

risposta

240

E 'il metodo di istanza description, dichiarato come:

- (NSString *)description 

Ecco un esempio di implementazione (grazie a grahamparks):

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

Nota se stai usando CoreData, la proprietà 'description' [è riservata] (http://stackoverflow.com/questions/4717519/why-cant-i-use- description-as-an-attribute-name-for-a-core-data-entity) ... e fornirà utili informazioni di debugging! In tal caso dovrai trovare il tuo nome di metodo univoco. – Nuthatch

+0

Anche 'debugDescription' è riservato? Anche se penso che 'DebugDescription' dovrebbe essere usato da un debugger come LLDB. – MaddTheSane

24

è possibile ignorare il metodo di descrizione NSObject:

- (NSString *)description 

Sul tema della registrazione vi consiglio questo blog post per una migliore registrazione in Objective-C.

+4

questo non è un metodo statico? Mi piacerebbe che funzionasse sugli oggetti piuttosto che sulla classe. Ad esempio, se ho una classe "Foto", con campi "nome" e "autore", vorrei che NSLog stampasse quei campi così come sono assegnati nell'oggetto. –

+2

Sì, ben individuato, ho premuto il tasto sbagliato. Dovrei chiaramente prestare maggiore attenzione quando prova a leggere le mie risposte. Per fortuna qualcuno ha messo gli occhi sulla palla :-) – teabot

34

Aggiungere questo al @implementation della classe Foto:

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

Ci sono due funzioni che puoi SE.

- (NSString*)description 

Questo verrà visualizzato quando si inserisce l'oggetto come, I.E. un parametro per NSLog. L'altra funzione descrizione è:

- (NSString*)debugDescription 

Questo sarà chiamato quando si esegue po anInstanceOfYourClass nella finestra di comando di debug. Se la tua classe non ha una funzione debugDescription, verrà chiamato solo description.

Si noti che la classe base NSObject ha description implementata, ma è piuttosto ridotta all'osso: visualizza solo l'indirizzo dell'oggetto. Questo è il motivo per cui ti consiglio di implementare description in qualsiasi classe di cui desideri ottenere informazioni, specialmente se utilizzi il metodo description nel tuo codice. Se usi il codice description, ti suggerisco di implementare anche lo debugDescription, rendendo anche più dettagliato il debugDescription.

1

Questa uscita volontà le voci disponibili:

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