Как правильно использовать селекторы в swift 4
Я прочитал много учебников и даже официальную документацию Apple и не должен понимать, что не так с этим кодом.
var dueDatePicker = UIDatePicker()
@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
textField.inputView = dueDatePicker
dueDatePicker.addTarget(self, action: #selector(datePickerValueChanged(_:)), for: UIControlEvents.valueChanged)
}
func datePickerValueChanged(_ sender: UIDatePicker){
//Do Stuff
}
во время выполнения я нажимаю на текстовое поле, и появляется UIDatePicker. Функция селектор очков выполняется. Как только я нажимаю объект UI за пределами UIDatePicker, приложение аварийно завершает работу с этой ошибкой:
прекращение приложения из-за необработанных исключений 'NSInvalidArgumentException', причина: '-[YourApp.PromiseViewController dueDateChanged:]: нераспознанный селектор отправлен в экземпляр 0x100b12ae0'
чего я не понимаю, так это того, что "селектор" или указатель на нужную функцию распознается изначально. Однако, когда я запускаю другое событие из другого объекта UI, это исключение создается.
почему это происходит?
не должно ли это исключение срабатывать, когда datePickerValueChanged()
изначально называется?
2 ответов
ошибка говорит вам, что действие с селектором dueDateChanged(_:)
было добавлено в качестве целевого действия.
в элемент управления можно добавить несколько целевых действий. Где-то, возможно, в вашей раскадровке или xib, у вас есть еще одно действие, добавленное в dueDatePicker
.
просто добавьте @objc перед вашей функцией
@objc func datePickerValueChanged(_ sender: UIDatePicker){
//Do Stuff
}