6

デバッグ変数が true の場合にのみ実行されるカスタムNSLog()メソッドを作成しようとしています。DNSLog()NSLog

-(void)DNSLog:(NSString *)formatString, ...
{
    if(debug){
        va_list args;
        va_start(args, formatString);
        NSLog([[NSString alloc] initWithFormat:formatString arguments:args]);
        va_end(args);
    }
}

しかし、私がそれを使ってそれを呼び出そうとすると

DNSLog(@"Hello %d",x);

コンパイル エラーが表示されます。

Undefined symbols for architecture i386:
  "_DZNSLog", referenced from:
      -[RestaurantInfoViewController viewDidLoad] in RestaurantInfoViewController.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

これを参考にしました: http://www.cocoawithlove.com/2009/05/variable-argument-lists-in-cocoa.html

どこが間違っていますか?

4

3 に答える 3

13

カスタム メソッドを使用する代わりに、このマクロをアプリ (おそらく .pch ファイル) に追加してみてください。

#ifdef DEBUG
#define MyLog(x, ...) NSLog(@"%s %d: " x, __FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
#define MyLog(x, ...)
#endif

これにより、デバッグ モードでは MyLog と呼ばれるカスタム ログが実行され、リリース時には何も実行されません。また、ログのファイルや行番号など、その他の有用な情報も出力します。

于 2013-06-06T05:39:51.287 に答える