0

我收到一个令我困惑的“无法识别的选择器”错误。

我知道我可以“po” LLDB 中的指针来了解接收器。但是有没有办法推断出哪个对象正在发送此消息?

谢谢!

4

2 回答 2

0

如果您正在处理多个线程,回溯并不总是有帮助 - 您最终会在主线程上获得异常处理程序的回溯,这不一定是导致错误的那个。

但是,由于您知道特定类不存在特定的选择器,因此您可以通过使用类别将选择器添加到类中来作弊,然后在其上放置一个断点。

例如,对于这个错误:

-[__NSCFDictionary isEqualToString:]: unrecognized selector sent to instance 0x10004fb0

我们知道有些东西试图用“isEqualToString”调用“NSDictionary”。因此,将其添加到您喜欢的任何文件的末尾,在任何其他“@implementation”块之外:

@implementation NSDictionary(debug)
- (BOOL)isEqualToString:(NSString*)theString {
    return FALSE;
}
@end

在此设置断点,重新运行您的代码,您将获得真正的堆栈跟踪。发现错误后不要忘记删除类别!

于 2014-02-20T11:28:39.960 回答
0

调试器中的命令bt将向您显示一个回溯(stacktrace),它应该为您提供在该输出中某处启动消息的类。

于 2012-11-19T00:26:29.157 回答