2017-06-22 13 views
7

Przeczytałem wiele tutoriali, a nawet oficjalną dokumentację Apple i nie mogę zrozumieć, co jest nie tak z tym kodem.Jak poprawnie używać selektorów w szybkim tempie 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 
} 

W czasie wykonywania klikam pole tekstowe, a pojawi się UIDatePicker. Wykonywana jest funkcja, do której prowadzi selektor. Jak tylko kliknąć obiekt UI poza UIDatePicker, aplikacja wywala z tego błędu:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[YourApp.PromiseViewController dueDateChanged:]: unrecognized selector sent to instance 0x100b12ae0'

Co ja nie rozumiem, jest to, że „selektor” lub wskaźnik do żądanej funkcji początkowego ujęcia. Jednak, gdy wyzwalam inne zdarzenie z innego obiektu interfejsu użytkownika, ten wyjątek jest generowany.

Dlaczego tak się dzieje?

Nie należy uruchamiać tego wyjątku, gdy początkowo wywoływana jest nazwa datePickerValueChanged()?

Odpowiedz

5

Błąd informujący o tym, że akcja z selektorem dueDateChanged(_:) została dodana jako akcja docelowa.

Do kontrolki można dodać więcej niż jedno działanie docelowe. Gdzie indziej, może w twoim scenorysie lub w Xib, masz kolejną akcję dodaną do dueDatePicker.

+0

Nie mogę uwierzyć, że nie widzę. Dzięki wielkie. Zaczynałem wątpić w samą logikę mojego istnienia. Twoje zdrowie! –

6

Wystarczy dodać @objc przed swoją funkcję

@objc func datePickerValueChanged(_ sender: UIDatePicker){ 
    //Do Stuff 
} 
+0

to rozwiązanie do ssania! – Fattie

+0

co powiesz na swój pomysł @Fattie –

+2

Przepraszam !! Mam na myśli to, że twoje rozwiązanie jest idealne !!! :) Ale to bardzo niefortunne, że Swift działa w tej chwili, to wstyd, że trzeba to zrobić. – Fattie

Powiązane problemy