无法识别的 Selector 发送给实例的快速排错法

01/25/2016

How to solve

Unrecognized selector sent to instance… 应该是 iOS 开发中比较常见的一种问题,但是一般这种错误的报错会指向 main.m,一时间很难找到是哪个对象发生了问题。这时,我们可以下一个 Debug 断点。

在 Xcode 的菜单栏中选择 Debug -> Breakpoints -> Create Symbolic Breakpoint… ,在弹出的标签的 Symbol 栏填入

-[NSObject(NSObject) doesNotRecognizeSelector:]

这时再次运行就会发现真正出现问题的地方了。

Example

今天在给 WebView 的一个属性赋值的时候一直报错。如果初始化 WebView 时不涉及这个属性的话,则不会出现问题。虽然我已经定位了问题的所在,但是如何解决依然没有头绪。添加断点后立刻发现,给这个属性传入的对象的某个属性出现了循环引用,改成 weak 后解决了问题。