Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iphonedev:如何获取字符串格式属性,如NSLog_Iphone_String_Format_Nslog - Fatal编程技术网

iphonedev:如何获取字符串格式属性,如NSLog

iphonedev:如何获取字符串格式属性,如NSLog,iphone,string,format,nslog,Iphone,String,Format,Nslog,我试图包装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, NSStr

我试图包装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);
  }
}
但在这种情况下,不会对属性进行求值

所以,我想我必须在我的实现中做一些事情,用参数格式化str,但是如何呢


thaks Prevance

关于这方面的详细描述,请参见:

以下是对这一点的完整描述:
谢谢……这是一个有效的实施方案

    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];
      }

    }
void LogUtil(id发送方,int级别,NSString*str,…){
如果(级别>=级别){
va_列表参数;
va_开始(args、str);
NSString*format=[[NSString alloc]initWithFormat:str参数:args];
va_端(args);
NSLog(@“%@”,发送方,格式);
[格式发布];
}
}

谢谢……这是一个有效的实现

    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];
      }

    }
void LogUtil(id发送方,int级别,NSString*str,…){
如果(级别>=级别){
va_列表参数;
va_开始(args、str);
NSString*format=[[NSString alloc]initWithFormat:str参数:args];
va_端(args);
NSLog(@“%@”,发送方,格式);
[格式发布];
}
}

@Achile,别忘了接受@Guy的回答。只需点击他答案旁边的“v”。@Achile,别忘了接受@Guy的答案。只需点击答案旁边的“v”。我建议您将整个功能代码放入“if”语句
if(level>=level)
…我建议您将整个功能代码放入“if”语句
if(level>=level)
。。。