1

何かをログに記録するたびに情報を追加するためだけに NSLog 関数をラップしようとしていますが、問題があります。

NSLog宣言は

void NSLog(NSString *format, ...) __attribute__((format(__NSString__,1,2)))

これにより、次のように呼び出しで複数のパラメーターを使用できます

NSLog(@"first %@ second %@ third %d,string,string,number);

私の宣言関数は似ています

  void LogUtil(id sender, int level, NSString *str, ...) __attribute__((format(__NSString__,3,4)))

そして実装はただ

void LogUtil(id sender, int level, NSString *str, ...){
  if(level>=LEVEL){
    NSLog(@"<%@> %@",sender,str);
  }
}

だから私はそれを次のように正しく呼び出すことができます

NSLog(self, 1, @"first %@ second %@ third %d,string,string,number);

ただし、この場合、属性は評価されません。

だから、実装でstrをパラメータでフォーマットするために何かをしなければならないと思いますが、どうすればいいですか??

事前にありがとう

4

2 に答える 2

2

ありがとう...これは機能する実装です

    void LogUtil(id sender, int level, NSString *str, ...){

      if(level>=LEVEL){
        va_list args;
        va_start(args,str);
        NSString *format=[[NSString alloc] initWithFormat:str arguments:args];
        va_end(args);  
        NSLog(@"<%@> %@",sender,format);
        [format release];
      }

    }
于 2010-08-26T09:19:47.177 に答える
2

その完全な説明は次のとおりです。 http://cocoawithlove.com/2009/05/variable-argument-lists-in-cocoa.html

于 2010-08-26T08:52:36.157 に答える