Crash when using performSelector: with a SEL passed from another class

早过忘川 提交于 2019-12-01 14:17:33

This is your problem:

[self performSelector:@selector(_selector)];

A SEL is a type representing the name of a method. @selector is a compiler directive which converts the literal text inside the brackets into a SEL.

But _selector, your ivar, already contains a SEL. You're converting the text "_selector" into a SEL, and then trying to use that. Since no method with the selector "_selector" exists in the target class, you get an exception.

Change the line to:

[self performSelector:_selector];

and everything should be dandy. This uses the SEL which you already have stored in the variable _selector.

Also, generally speaking, please post your real code initially.

[self performSelector:@selector(_selector)];   

The code above actually translates to [self _selector] which I'm assuming is not what you want. You should change your code to

[self performSelector:_selector];   
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!