我閱讀這篇文章:http://weakreference.wordpress.com/2011/06/22/overriding-nslog-on-ios/。在prefix.pch中覆蓋NSLOG IOS
本文的想法是將這兩個東西添加到您的應用程序的prefix.pch文件,以便您可以覆蓋NSLog的行爲。
的兩件事情我加入是:
#define NSLog(...) customLogger(__VA_ARGS__);
和
void customLogger(NSString *format, ...) {
va_list argumentList;
va_start(argumentList, format);
NSMutableString * message = [[NSMutableString alloc] initWithFormat:format
arguments:argumentList];
[message appendString:@"Our Logger!"]; // Our custom Message!
NSLogv(message, argumentList); // Originally NSLog is a wrapper around NSLogv.
va_end(argumentList);
[message release];
}
Xcode中拋出一個錯誤的比賽-O錯誤,它找到customLogger的副本。
有沒有人成功覆蓋NSLog?
謝謝!
編輯迴應羅布:
好,太好了。我們正在取得進展!我就像你問的那樣移動了東西。下面是我們現在有:
我的自定義記錄器:
void customLogger(NSString *format, ...) {
va_list args;
va_start(args, format);
va_end(args);
[newLogger log:format withArgs:args];
}
//This is a newLogger Method
+ (void) log:(NSString *)format withArgs:(va_list) args{
NSArray *occ = [format componentsSeparatedByString:@"%@"];
NSInteger characterCount = [occ count];
NSArray *stringItems = [format componentsSeparatedByString:@"%@"];
NSMutableString *tmp = [[NSMutableString alloc] initWithFormat: @"%@",[stringItems objectAtIndex:0]];
for(int i = 1; i < characterCount; i++) {
NSString *value = va_arg(args, NSString *);
[tmp appendString:value];
[tmp appendString:[stringItems objectAtIndex:i]];
}
// Need to alter the above and actually do something with the args!
[tmp appendString:@"\n"];
[[newLogger sharedInstance].logBuffer appendString:tmp];
if ([newLogger sharedInstance].textTarget){
[[newLogger sharedInstance].textTarget setText:sharedInstance.logBuffer];
}
}
當我打電話+日誌,我得到線程一個SIBABRT錯誤1.
好的,那是有效的......部分。 現在,我要重寫NSLOG。這意味着,我放了一行:#define NSLog(...)customLogger(__ VA_ARGS__);,然後在自定義記錄器函數中執行: void customLogger(NSString * format,...){ va_list ARGS; \t va_start(args,format); \t va_end(args); [newLogger log:format withArgs:args]; } ..這將獲取所有傳遞給NSLog的數據,並將它們發送到我的newLogger。 - 做這些事情給我一個神祕的崩潰,那就是線程1上的SIGABRT。 – Jeff 2012-07-12 14:01:49
在調用'newLogger'之後,你需要調用'va_end',而不是之前。 – 2012-07-12 15:16:54