私はこの記事を読みました:http ://weakreference.wordpress.com/2011/06/22/overriding-nslog-on-ios/ 。
この記事の目的は、これら2つをアプリのprefix.pchファイルに追加して、NSLogの動作をオーバーライドできるようにすることです。
私が追加している2つのものは次のとおりです。
#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は、customLoggerの重複を検出するというエラーmatch-oエラーをスローします。
誰かが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];
}
}
+ logを呼び出すと、スレッド1でSIBABRTエラーが発生します。