Непризнанный селектор, отправленный в класс

Я видел это, это обычная проблема, но я не мог найти решения для себя.

Вот код:

class ButtonViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() view.addSubview(button) } func exmp(sender: UIButton) { print("hello world") } let button: UIButton = { let but = UIButton(frame: CGRect(x: 33, y: 33, width: 33, height: 33)) but.setTitle("-", for: .normal) but.titleLabel?.textColor = UIColor.white but.layer.cornerRadius = 10 but.backgroundColor = UIColor.red but.addTarget(ButtonViewController.self, action: #selector(ButtonViewController.exmp(sender:)), for: .touchDown) return but } } 

Проблема: появляется красная кнопка, но когда я нажимаю на нее, я получаю сообщение об ошибке «Непризнанный селектор, отправленный в класс».

Любая помощь приветствуется! Благодарю.

2 Solutions collect form web for “Непризнанный селектор, отправленный в класс”

Вы получаете нераспознанный селектор, отправленный в класс, потому что вы установили неверную цель. Цель должна быть self а не ButtonViewController.self :

 but.addTarget(self, action: #selector(ButtonViewController.exmp(sender:)), for: .touchDown) 

Ваш #selector работает, но для Swift 3 вы должны написать действие как func exmp(_ sender: UIButton) { создание селектора #selector(exmp(_:)) . Примечание: если вы переписываете exmp , вы можете упростить селектор только #selector(exmp) .

Поэтому я искал эту проблему в течение 2 дней. Правильный метод addTarget должен выглядеть следующим образом:

 but.addTarget(self, action: #selector(ButtonViewController.exmp(sender:)), for: .touchDown) 

Но для меня осталась еще одна проблема: «Ошибка команды из-за сигнала: Ошибка сегментации: 11» .

Когда я попытался создать мою кнопку в методе viewDidLoad (), ошибки не было. Поэтому я подумал, что может быть что-то, с чем создается кнопка или нет. И я ставлю ленивый var вместо того, чтобы создавать свою кнопку.

Тем не менее, как новичок, я действительно не знаю, что такое «layz var». Я просто знаю, что вызывает создание моей кнопки, только когда ее вызывают. Было бы неплохо, если бы кто-то просветил меня и других начинающих здесь вокруг ленивых варов. Благодарю.

Окончательное решение

 override func viewDidLoad() { super.viewDidLoad() view.addSubview(button) } func exmp(sender: UIButton) { print("hello world") } lazy var button: UIButton = { let but = UIButton(frame: CGRect(x: 33, y: 33, width: 33, height: 33)) but.setTitle("-", for: .normal) but.titleLabel?.textColor = UIColor.white but.layer.cornerRadius = 10 but.backgroundColor = UIColor.red but.addTarget(self, action: #selector(ButtonViewController.exmp(sender:)), for: .touchDown) return but }() 
  • Swift3: UITableViewCell и UIButton - Показать и скрыть UITableViewCell, щелкнув UIButton
  • FB Войти с использованием Swift 3 не возвращает никаких значений и не возвращает пользователя в приложение после успешного входа в систему
  • Как мне получить игровые площадки SpriteKit, работающие в бета-версии Xcode 8?
  • Невозможно использовать AVCapturePhotoOutput для захвата фотографии swift + xcode
  • Используйте версию Legacy Swift Language - Xcode 8.2
  • Ошибка: Заполнитель редактора в исходном файле, при преобразовании расширения строки в swift 3
  • MailComposer didFinish С результатами не работает в Swift 3.0
  • Странные ошибки после преобразования кода образца SceneKit в Swift 3
  • Как установить swift 3 UITextField цвет границы?
  • Swift 3 - Дождаться результата сервера
  • Как загрузить отображение ломаной карты google в ячейке tableview?
  • Interesting Posts
    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.