我收到一个“无法识别的选择器”错误让我感到困惑。
我知道我可以在LLDB中“指出”指针以了解接收器。但有没有办法推断出哪个对象正在发送此消息?
谢谢!
答案 0 :(得分:0)
调试器中的命令bt
将向您显示一个回溯(stacktrace),它应该为您提供在该输出中某处启动消息的类。
答案 1 :(得分:0)
如果你处理多个线程,Backtrace并不总是有帮助 - 你最终会在主线程上找到异常处理程序的回溯,这不一定是导致错误的那个。
但是,既然您知道特定类的特定选择器不存在,您可以通过使用类别将选择器添加到类中来作弊,然后在其上粘贴断点。
例如,对于此错误:
-[__NSCFDictionary isEqualToString:]: unrecognized selector sent to instance 0x10004fb0
我们知道有些东西试图用“isEqualToString”调用“NSDictionary”。因此,在您喜欢的任何文件的末尾添加此项,在任何其他“@implementation”块之外添加:
@implementation NSDictionary(debug)
- (BOOL)isEqualToString:(NSString*)theString {
return FALSE;
}
@end
坚持使用断点,重新运行代码,您将获得真正的堆栈跟踪。一旦发现错误,请不要忘记删除类别!