2010-07-10 37 views
0

我在Xcode中编写宏时遇到新问题,并且在编写我自己的NSLog替换时遇到问题。我一直在使用一些例子,但想稍微调整它们,所以它们更像Log4。Objective-C宏的错误

我试图写一个第二个宏(或者理想情况下只是第一个委托),它需要一个日志级别的变量以及格式化的字符串和参数。但每次我尝试传递一个变量(在本例中为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, ...; 

例外:

+ [管理记录logFile2:行号:LOGLEVEL ::格式:]: 无法识别的选择发送到课 0x51600 2010-07-10 10:49:21408 明星[34433:207] *** 由于未被捕获而终止应用程序 例外 'NSInvalidArgumentException' 的,原因: '+ [管理记录 logFile2:LINENUMBER:LOGLEVEL ::格式:]: 无法识别的选择发送到 类0x51600'

我的测试日志消息:

MLogWithLevel(0: @"log at level %i", 0); 

感谢

回答

2

下降结肠,使用逗号:

MLogWithLevel(0, @"log at level %i", 0); 
// fix here: ^
+0

有人有他们的weetabix! – 2010-07-10 10:05:22

+0

@tiegermain - 如果它解决了您的问题,请不要忘记勾选此答案。 – TechZen 2010-07-10 13:14:09

+0

我会但发布后过早! – 2010-07-14 17:26:33