2009-09-22 18 views
17

Mi piacerebbe essere in grado di mettere i messaggi di traccia del nome corrente della classe e del metodo per tutte le classi nel mio progetto.Recupero dinamico del nome del metodo corrente

C'è un modo per ottenere il nome del metodo corrente in fase di esecuzione, simile a:

NSLog(@"classname: %@", [self className]); 

dove l'auto è una classe derivata di NSObject?

risposta

35
NSLog(@"method name: %@", NSStringFromSelector(_cmd)); 

_cmd è un argomento nascosto (come self) che tutti i metodi Objective-C ricevono. Il suo valore è il selettore che è stato usato per chiamare il metodo.

+0

i utilizzano SEL myRunTimeSelector = _cmd. Grazie – Alok

+0

Soluzione adeguata con spiegazioni. Grazie. –

18

CURA: penso che questo metodo è più generico ... il check-out ..

NSLog(@"%s", __PRETTY_FUNCTION__); 
+0

mi scuso se esco come condiscendente, non intendevo ... Ho trovato questa soluzione più generica ... – Nishant

+2

ottima risposta. lo metto in una macro, come questa: #define LOGME NSLog (@ "% s", \ _ \ _ PRETTY_FUNCTION \ _ \ _); –

+0

Ottima risposta @Nishant .. Sta dando sia il nome della classe che il nome del metodo per il debug corretto ... –

1

Questo funziona anche:

NSLog(@"%@", [NSString stringWithUTF8String:__func__]) 
Problemi correlati