在Xcode中重新定义NSLog

时间:2011-05-03 06:56:21

标签: objective-c nslog

我对Xcode和Objective-C有疑问。

我想在Xcode中做出这个简单的动作:

如果我输入:

NSLog(@"something else");

我希望Xcode编写(或在编译后执行):

NSLog(@"[%@] something else", NSStringFromClass([self class]));

当我输入NSLog时,另一种方法可能是Xcode 4在自动完成菜单中建议这个...

3 个答案:

答案 0 :(得分:7)

以下是一套完整的Log #define指令(包括 ULog 基于UIAlertView 的日志记录功能)

// DLog will output like NSLog only when the DEBUG variable is set

#ifdef DEBUG
#   define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#   define DLog(...)
#endif

// ALog will always output like NSLog

#define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);

// ULog will show the UIAlertView only when the DEBUG variable is set 

#ifdef DEBUG
#   define ULog(fmt, ...)  { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"%s\n [Line %d] ", __PRETTY_FUNCTION__, __LINE__] message:[NSString stringWithFormat:fmt, ##__VA_ARGS__]  delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; }
#else
#   define ULog(...)
#endif

Ciryon编写,只需将它们放在预编译头文件(.pch)中即可。

(来源:http://overbythere.co.uk/blog/2012/01/alternatives-nslog

答案 1 :(得分:1)

您可能更愿意创建一个宏并将其放在预编译头(.pch)文件中。

#ifdef DEBUG
#   define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#   define DLog(...)
#endif

(取自this blog post

答案 2 :(得分:0)

为什么不使用像SOSMAX或NSLogger这样的其他非常优秀的替代选项,因为我在这里写了http://learning-ios.blogspot.com/2011/05/better-nslog-ing.html