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

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

Вот код:

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 } } 

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

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

Вы получаете нераспознанный селектор, отправленный в класс, потому что вы установили неверную цель. Цель должна быть 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 }() 
  • Ошибка сбоя сегментации при переходе от SWIFT 2 к SWIFT 3
  • Создание экземпляров классов, хранящихся в метатипах Словарь
  • Как исчезать между разными цветами фона `UICollectionView`, когда пользователь прокручивается на другую страницу?
  • iOS: API Карт Google - markerInfoWindow vs markerInfoContents
  • Swift 3, расширение универсального класса Objective-C с функцией, которая принимает замыкание
  • Невозможно преобразовать значение типа «NSMutableDictionary», чтобы ввести «» в принудительном порядке для google ios Analytics
  • Timer.scheduledTimer не работает в Swift 3
  • В чем разница между @noescape, @escaping и @autoclosure?
  • Обновление элемента панели вкладок на веб-просмотре
  • Универсальный IBDesginables расширение UIView
  • Распознавание речи с использованием звука AVAudioEngine Blocks после записи
  • Давайте будем гением компьютера.