В большинстве случаев Xcode не приводит нас к той строке, где возникает эта проблема. При сбое приложения вы не увидите строку кода, вызвавшую это, скорее вы попадете в класс делегата приложения, с выводом ошибки примерно следующим образом:
[UITableViewCellContentView image]: unrecognized selector sent to instance
or[__NSDictionaryI objectAtIndex:] unrecognized selector sent to instance
or *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[TestApp.MyViewController viewDidLoad:]: unrecognized selector sent to instance 0xDABCDD'
Как найти строку кода, вызывающую это:
Перейдите в навигатор точек останова. Щелкните опцию «+». щелкните «Exception Breakpoint». Появится новый виджет, подобный следующему.
Добавьте следующий блок условия:
-[NSObject(NSObject) doesNotRecognizeSelector:]
* вы также можете установить точку останова для всех исключений.
Теперь снова запустите свой код. на этот раз точка останова сработает при возникновении этого исключения.
Устраните проблему:
- Проверьте, вызывается ли селектор на правом объекте. проверьте, не забыли ли вы установить цель при установке селектора.
[self addTarget:self action:@selector(clickedOnElement) forControlEvents:UIControlEventTouchUpInside];
- Проверьте имя функции на наличие опечатки.
- Проверьте параметры функции, распечатав их, как показано ниже, на предмет несоответствия подписи:
Swift: print(#function) Obj: NSLog(@"%s", __PRETTY_FUNCTION__)