2010-04-21 19 views
1

Je voudrais avoir une méthode de journalisation réutilisable ou une fonction qui crache le nom de la méthode à partir de laquelle elle est appelée. Exemple:Objectif C: La méthode connaît-elle le contexte dans lequel elle a été appelée?

- (void)exampleMethod { 
     CustomLog(); //Outputs "exampleMethod" 
    } 
+0

en double de http://stackoverflow.com/questions/1451342/objective-c-find-caller-of-method? –

+0

La question est un doublon (n'a pas vu cela et oui j'ai fait une recherche), mais la réponse fournie à cette question n'a pas été utile de toute façon. Deux réponses utiles ont été fournies pour cette question ci-dessous. Merci d'avoir trouvé la dupe bien. –

Répondre

2

Les fonctions ne connaissent pas leur environnement d'appel (du moins pas de manière utile). La seule façon est d'utiliser une macro à la place. À l'intérieur de la macro, vous avez accès aux arguments self et _cmd qui contiennent le récepteur et le sélecteur de courant, ainsi que la macro __PRETTY_FUNCTION__ qui contient le nom lisible par l'homme de la méthode en tant que chaîne C.

0

Voir How to print out the method name and line number and conditionally disable NSLog? pour l'inspiration de cette réponse et d'autres conseils utiles NSLog. Voici ce que je désirais:

//place in PCH file 
#define ILog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); 

//use in any file in your project 
ILog(@"test");// outputs -[AppDelegate applicationDidFinishLaunching:] [Line 38] test