Ich versuche, eine benutzerdefinierte NSLog()
Methode, DNSLog()
, die die NSLog
nur ausführt, wenn die Debug-Variable wahr ist.Benutzerdefinierte NSLog-Methode (Variadic)
-(void)DNSLog:(NSString *)formatString, ...
{
if(debug){
va_list args;
va_start(args, formatString);
NSLog([[NSString alloc] initWithFormat:formatString arguments:args]);
va_end(args);
}
}
Aber wenn ich es versuchen Aufruf
mitDNSLog(@"Hello %d",x);
I erhalten einen Kompilierungsfehler:
Undefined symbols for architecture i386:
"_DZNSLog", referenced from:
-[RestaurantInfoViewController viewDidLoad] in RestaurantInfoViewController.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ich das als Referenz verwendet haben: http://www.cocoawithlove.com/2009/05/variable-argument-lists-in-cocoa.html
Wo bin ich falsch machen ?
Ich denke du solltest C lernen, bevor du versuchst, in fortgeschrittene Sachen zu kommen. Es scheint, dass Sie nicht einmal zwischen der Syntax einer C-Funktion und einer Objective-C-Methode unterscheiden können ... –
Außerdem ist Ihr Code anfällig für Formatstring-Angriffe/-Fehler. Sie sollten stattdessen 'NSLogv (formatString, args);' verwenden. –