【问题标题】:Error with objective-c macroObjective-C 宏出错
【发布时间】: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


    【解决方案1】:

    去掉冒号,用逗号:

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

    【讨论】:

    • @tiegermain -- 如果它解决了你的问题,别忘了勾选这个答案。
    • 我会的,但发布后为时过早!
    猜你喜欢
    • 2011-04-16
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 2011-08-08
    相关资源
    最近更新 更多