我想使用CocoaLumberjack并尝试在我的.pch文件中插入ddLogLevel
const
:
#if DEBUG
static const int ddLogLevel = LOG_LEVEL_VERBOSE;
#else
static const int ddLogLevel = LOG_LEVEL_INFO;
#endif
但是,由于我正在使用XMPP框架,并且使用CocoaLumberjack,因此我收到Redefinition of 'ddLogLevel'
错误,因为这些类包含与上面完全相同的const
定义。
我绝对不想在每个类中定义ddLogLevel
来避免这种情况。我怎么能绕过这个?
答案 0 :(得分:2)
你可以在它附近加一个守卫。像这样:
#ifndef ddLogLevel
#if DEBUG
static const int ddLogLevel = LOG_LEVEL_VERBOSE;
#else
static const int ddLogLevel = LOG_LEVEL_INFO;
#endif //DEBUG
#endif //ddLogLevel
如果您不能使用ddLogLevel作为警卫:(目前无法测试)
#ifndef DDLOGLEVEL
#if DEBUG
#define DDLOGLEVEL
static const int ddLogLevel = LOG_LEVEL_VERBOSE;
#else
static const int ddLogLevel = LOG_LEVEL_INFO;
#endif //DEBUG
#endif //DDLOGLEVEL
我希望它有效。
答案 1 :(得分:1)
我认为答案是不要将ddLogLevel声明为静态(如本指南https://github.com/CocoaLumberjack/CocoaLumberjack/wiki/XcodeTricks中所述)
相反,请遵循此Global log level for cocoalumberjack
这类似于MagicalRecord遇到的Magical Record takes ownership of ddLogLevel
Constant.h
extern int const ddLogLevel;
Constant.m
#import <CocoaLumberjack/DDLog.h>
#ifdef DEBUG
int const ddLogLevel = LOG_LEVEL_VERBOSE;
#else
int const ddLogLevel = LOG_LEVEL_WARN;
#endif
另外,有些人似乎不明白标头文件中static
个关键字的含义,请阅读此Variable declarations in header files - static or not?
答案 2 :(得分:0)
在预处理程序指令中包装定义:
#ifndef DEFINED_DD_LOG_LEVEL
#define DEFINED_DD_LOG_LEVEL
# if DEBUG
...
# endif // DEBUG
#endif // DEFINED_DD_LOG_LEVEL