2009-07-01 8 views

risposta

12

Legga questo: http://cocoaheads.byu.edu/wiki/different-nslog

Si tratta di una pagina wiki sul nostro sito CocoaHeads che spiega come per creare una funzione "QuietLog" che fa ciò che stai descrivendo. Mostra anche come avvolgere QuietLog in una macro denominata LocationLog in modo che stampi il nome del file e il numero di riga in cui è presente l'istruzione del registro. Lo uso in tutti i miei progetti e non perdo più le dichiarazioni "NSLog".

+2

+1 Dang, stavo per pubblicare la stessa cosa. Ho * scritto * quella pagina wiki ... ;-) –

+0

E l'hai ottenuto dai Quickie di Borkware, quindi tutto si uniforma. ;) –

+0

Questo link è morto. – JWWalker

0

Si potrebbe stampare sdterr:

fprintf(stderr, "%s", "Your message"); 

Edit: Partenza this implementation da Karl Kraft

+0

Ciò richiede (conversione in) una stringa C e una stringa di formato con% @ non funzionerà. Non è una cattiva idea, ma usarlo direttamente non è una sostituzione drop-in per NSLog(). –

+0

È vero, dovresti metterlo in una funzione con varargs. Ne uso uno da Karl Kraft http://www.karlkraft.com/index.php/2009/03/23/114/ –

+0

Mi piace l'interruttore di debug on/off nel suo approccio, ma anche lui non fa fughe %% (certamente raro, ma problematico quando si verificano). –

1

Mi piace essere in grado di utilizzare oggetti obiettivo-C per formattare stringhe e argomenti, quindi ho riscritto NSLog() e l'ho aggiunto alle mie utilità.


+ (void)myLog:(NSString *)formatString, ... 
{ 
    va_list args; 
    va_start(args, formatString); 
    NSString* output = [[NSString alloc] initWithFormat:formatString arguments:args]; 
    fprintf(stderr, "%s\n", [output UTF8String]); 
    [output release]; 
    va_end(args); 
} 
+0

Se leggi il link a cui Dave è collegato, vedrai che questo è ciò che facciamo, tranne che gestiamo anche %% entità nella stringa di formato. –

+0

Quinn, non ho visto quel post fino a dopo ho postato la mia risposta. Inoltre c'è qualcosa da dire per avere la risposta in anticipo e non dover seguire un link esterno. – Mark

+0

Nessun problema. (SO di solito ti dirà quando sono già state pubblicate altre risposte, ma la sovrapposizione è abbastanza normale.) Hai ragione, a volte è bello avere il codice giusto nella risposta. Tuttavia, una volta che passa una certa dimensione, o in questo caso quando è probabile che la pagina wiki cambi (che ha dal post di Dave), potrebbe essere meglio collegare. –

1

Hai provato CFShow()?

+0

(Aggiunto collegamento ai documenti) Non ero a conoscenza di tale funzione, buono a sapersi.Tuttavia, non è una sostituzione drop-in, dal momento che dovresti avere una NSString * da trasmettere come CFStringRef. Eppure, si potrebbe facilmente definire una macro o una funzione per avvolgere CFShow() ... –

+0

Sfortunatamente, CFShow ha un comportamento molto strano in Leopard che erroneamente riesce a intrecciare le righe in modo non corretto. Per Leopard, è sicuramente meglio evitare del tutto CFShow. –

2

Questa macro preprocessore è facile da implementare e non si devono cambiare le tue attuali NSLog dichiarazioni:

#define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]); 

Funziona tutto come NSLog senza tutte le cose in più prima del messaggio.

L'originale l'ho trovato su un'altra domanda SO, ma non riesco a trovarlo ora.

Problemi correlati