iphone - 在 prefix.pch IOS 中覆盖 NSLOG

标签 iphone objective-c ios xcode ios5

我读了这篇文章:http://weakreference.wordpress.com/2011/06/22/overriding-nslog-on-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 抛出错误 match-o 错误,它找到了 customLogger 的重复项。

有没有人成功覆盖 NSLog?

谢谢!

编辑以回应 Rob:

好的,很好。我们在进步!我按照你的要求移动了东西。这是我们现在拥有的:

我的自定义记录器:

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 错误。

最佳答案

听起来您在 .pch 文件中定义了 customLogger。这意味着每个 .m 文件都包含它,因此您的项目创建的每个 .o 文件都包含它自己的 customLogger 副本。这就是为什么您会从链接器中收到重复的符号定义错误。

您只需在 .pch 中声明 customLogger,如下所示:

void customLogger(NSString *format, ...);

并创建一个包含定义的 customLogger.m 文件。

关于iphone - 在 prefix.pch IOS 中覆盖 NSLOG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11441962/

相关文章:

ios - 限制UIButton标题文本框

ios - UIPanGestureRecognizer 将事件传递给下面的按钮

ios - 如何检查 iOS 7 中特定应用程序是否启用了位置服务?

iphone - UIDatePicker 不显示正确的时间

ios - 如何制作功能正常的动画按钮?

ios - UITableViewCell 的 UIButton subview 取消选择 UITableViewCell?

ios - 关闭 WKWebView 并使用 Swift 4 更改 ViewController

iphone - 在 iPad 上截取部分屏幕截图

ios - Google Plus iOS SDK 是否支持 arm64?

iphone - iPhone/iPad 应用程序中的 YouTube 集成