我创建了一个自定义日志记录类,该类将某些内容记录到文件中。我正在尝试制作一个宏,以便可以像NSLog()
一样使用我的自定义类,但是它似乎无法正常工作。
这是我定义宏的方式:
#define ECLog(fmt, ...) [ECLogger logText:fmt, ## __VA_ARGS__]
logText:
的声明如下:+ (void)logText:(NSString *)theString;
如果我仅传递一个参数,则效果很好。像这样:
ECLog(@"test");
但是,如果我传递另一个参数,像这样:
ECLog(@"test %@",someString);
我得到一个错误,它只期望一个参数。
有任何想法吗?
最佳答案
不,警告与方法调用有关。该错误似乎与宏有关,因为在预处理器处理宏之前您正在查看代码,但编译器指向同一行,即后处理。
您已将此方法声明为采用一个参数,但您传递的不止于此。
ECLog(@"test %@", someString);
由预处理器重写为:
[ECLogger logText:@"test %@", someString];
那就是现在传递给编译器的文字文本,就像您自己以这种方式键入它一样。该方法声明为采用单个
NSString
,但是您将其传递了两点。您需要更改方法的声明:+ (void) logText: (NSString *)theString, ...;