Как получить форматированную строку NSString из списка format и va?
Я разрабатываю статическую библиотеку, которая будет распространяться среди других разработчиков, которым могут понадобиться инструкции отладки. Так что у меня есть несколько уровней ведения журнала.
Во избежание постоянного появления
if(loggingLevelCurrentlySet >= loggingLevelWantedForThisInstance){
NSLog(@"log this");
}
Я создал набор оболочек функций ведения журнала. Упрощенная версия выглядит следующим образом:
void myLog(int logLevel, NSString *format, va_list args){
if((loggingLevelCurrentlySet >= logLevel)){
NSLogv(format, args);
}
}
void myLogLevel1(NSString *format, ...){
va_list args;
va_start(args, format);
myLog(1, format, args);
va_end(args);
}
void myLogLevel2(NSString *format, ...){
va_list args;
va_start(args, format);
myLog(2, format, args);
va_end(args);
}
И т. д.
Но теперь, я хочу, изнутри myLog, получить доступ к полностью сформированной строке, чтобы сделать что-то еще.
void myLog(int logLevel, NSString *format, va_list args){
NSString *fullString = [NSString stringWithFormat:format, args]; //crashes when args is anything but an empty list
CFStringRef cfsr = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, format, args); //also crashes
//want to use the string here
if((loggingLevelCurrentlySet >= logLevel)){
NSLogv(format, args);
}
}
1 ответ:
NSString *fullString = [[[NSString alloc] initWithFormat:format arguments:args] autorelease];
Для этого есть метод ;)
Хотя я предлагаю использовать не функции, а некоторые простые макроопределения:
#define myLogLevel1(format, ...) myLog(1, format, __VA_ARGS__) #define myLogLevel2(format, ...) myLog(2, format, __VA_ARGS__)