【发布时间】:2010-07-10 09:50:59
【问题描述】:
我是在 Xcode 中编写宏的新手,并且在编写自己的 NSLog 替换时遇到了问题。我一直在使用一些示例,但想稍微调整一下,让它们更像 Log4。
我正在尝试编写第二个宏(或者理想情况下只是第一个的委托),它采用日志级别变量以及用于格式化的字符串和参数。但是每次我尝试传递一个变量(在本例中为 l)时,我都会收到一个 SIGART 错误 NSArgumentException。第一个宏工作正常
#define MLog(s,...) \
[MLog logFile:__FILE__ lineNumber:__LINE__ \
format:(s),##__VA_ARGS__]
#define MLogWithLevel(l,s,...) \
[MLog logFile2:__FILE__ lineNumber:__LINE__ logLevel:l \
format:(s),##__VA_ARGS__]
这是我的方法定义
+(void)logFile:(char*)sourceFile
lineNumber:(int)lineNumber
format:(NSString*)format, ...;
+(void)logFile2:(char*)sourceFile
lineNumber:(int)lineNumber
logLevel:(int)logLevel
format:(NSString*)format, ...;
例外情况:
+[MLog logFile2:lineNumber:logLevel::format:]: 无法识别的选择器发送到类 0x51600 2010-07-10 10:49:21.408 名人[34433:207] *** 由于未捕获而终止应用程序 例外 'NSInvalidArgumentException',原因: '+[MLog logFile2:lineNumber:logLevel::format:]: 无法识别的选择器发送到类 0x51600'
我的测试日志信息:
MLogWithLevel(0: @"log at level %i", 0);
谢谢
【问题讨论】:
标签: iphone objective-c macros