多くのチュートリアルやAppleの公式ドキュメントを読んだことがあります。このコードの何が間違っているのか理解してはいけません。セレクタを適切に使用する方法4
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
}
実行時にtextFieldをクリックすると、UIDatePickerが表示されます。セレクタが指す関数が実行されます。できるだけ早く私はUIDatePickerの外UIオブジェクトをクリックすると、アプリがこのエラーでクラッシュ:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[YourApp.PromiseViewController dueDateChanged:]: unrecognized selector sent to instance 0x100b12ae0'
私は理解していないと、所望の機能に「セレクタ」やポインタが最初に認識されていることです。しかし、別のUIオブジェクトから別のイベントをトリガすると、この例外がスローされます。
どうしてですか?
datePickerValueChanged()
が最初に呼び出されたときにこの例外は発生しませんか?
を@objcを追加します。本当にありがとう。私は自分の存在の真実を疑い始めました。乾杯! –