解决方法:使用未声明的标识符'_cmd'

时间:2012-12-01 17:37:28

标签: objective-c c logging macros nsstring

我有一个特殊的NSLog方法swizzle,它将当前方法作为日志语句的一部分打印出来。

对于Objective-C方法,我有一个使用:NSStringFromSelector(_cmd)

的宏

对于非Objective-C方法,我有第二个使用__PRETTY_FUNCTION__的宏,因为_cmd未定义。

我现在正在尝试为两者使用相同的宏,所以我试图测试它是否已定义并认为我可以这样做:

NSString *command = (&_cmd != nil ? NSStringFromSelector(_cmd) : [NSString stringWithCString:__PRETTY_FUNCTION__ encoding:NSUTF8StringEncoding])

但是当在非Objective-C方法中使用宏时,我仍然会遇到一些Use of undeclared identifier '_cmd'错误。如何进行运行时测试确定是否定义了_cmd

1 个答案:

答案 0 :(得分:0)

您无法在运行时测试是否已定义_cmd

__PRETTY_FUNCTION__宏在Objective-C方法中定义。只需在任何地方使用__PRETTY_FUNCTION__,不要尝试使用_cmd

示例:

- (IBAction)mapWasTapped:(UITapGestureRecognizer *)sender {
    NSLog(@"%s", __PRETTY_FUNCTION__);
}

这是输出:

2012-12-01 11:45:30.036 TestApp[92581:c07] -[MainViewController mapWasTapped:]