有没有一种方法可以打印SEL操作?

17
例如,我想追踪发送到我的canPerformAction的操作,但每次在调试器中悬停显示它们太多了。因此,我想将其追踪到日志并在测试循环后进行检查。
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    NSLog(@"%s: sender=%@", __FUNCTION__, sender, action);
}

7
我找到了答案:NSStringFromSelector(action)。 - mobibob
2个回答

36

你想要什么

NSLog(@"%s: sender=%@, selector=%s", __FUNCTION__, sender,sel_getName(action));

5
sel_getName() 返回的是一个 C 字符串,而非 NSString。使用 %s 作为格式或者更好的方式是使用 NSStringFromSelector() - jscs
1
感谢Jacques和Dave - 在我提出问题后,我找到了宏NSStringFromSelector。+1并接受你的回答。 - mobibob

12

使用 NSStringFromSelector 可以轻松获取一个 Selector 的可打印名称。

NSStringFromSelector(action)

NSString * NSStringFromSelector ( SEL aSelector );

返回给定 Selector 的字符串表示形式。

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    NSLog(@"Action: %@", NSStringFromSelector(action));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接