首先,我一直在阅读一些有关CocoaLumberjack的主题,但我无法找到解决此问题的方法:

我正在使用CocoaLumberjack登录我的应用程序。但我也想登录应用程序崩溃。

我已经试过了:

void uncaughtExceptionHandler(NSException *exception) {
    DDLogError(@"CRASH: %@", exception);
    DDLogError(@"Stack Trace: %@", [exception callStackSymbols]);
    // Internal error reporting

    // Send log to SOA

}

但是我在appDelegate中遇到了这个错误,在其他地方效果很好:
Use of undeclared identifier '_cmd'; did you mean 'dcmd'

还有另一种方法吗?

最佳答案

_cmd是当前选择器或正在调用的Objective-C方法的快捷方式。例如,在实现了以下方法的类中:

@implementation MDAppController

- (void)applicationWillFinishLaunching:(NSNotification *)notification {
    NSLog(@"[%@ %@]", NSStringFromClass([self class]),
                          NSStringFromSelector(_cmd));
}

@end

它会打印出来:
[MDAppController applicationWillFinishLaunching:]
尝试从该DDLogError()函数中使用uncaughtExceptionHandler()时遇到了问题,因为它是C函数,而不是Objective-C方法,因此_cmd是未定义的。

您应该使用DDLogCError()而不是DDLogError(),因为前者旨在用于C函数而不是Objective-C方法。

07-27 23:20