6

まず、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'?

これを行う別の方法はありますか?

4

3 に答える 3

11

_cmd現在のセレクター、または呼び出されている Objective-C メソッドのショートカットです。たとえば、次のようなメソッドを実装したクラスでは:

@implementation MDAppController

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

@end

次のように出力されます。

[MDAppController applicationWillFinishLaunching:]

DDLogError()その関数内から使用しようとすると問題が発生します。uncaughtExceptionHandler()これは C 関数であり、Objective-C メソッドで_cmdはないため、未定義です。

前者は Objective-C メソッドではなく C 関数での使用を意図しているため、DDLogCError()代わりに を使用する必要があります。DDLogError()

于 2014-02-27T19:27:13.500 に答える