2016-05-13 5 views
0

Следующий код вызывает сбой при каждом сохранении даты с помощью устройства выбора даты. Новая дата сохраняется, но не до завершения XCode. Там что-то случилось с моим "DatePickerValueChanged" Скажите, пожалуйста, почему это не работает:Непризнанный селектор, отправленный в экземпляр Swift 2.1 - выбор даты

Код:

override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.delegate = self 
    tableView.dataSource = self 
    tableView.estimatedRowHeight = tableView.rowHeight 
    tableView.rowHeight = UITableViewAutomaticDimension 
    //hide blank cells in table view 
    let backgroundView = UIView(frame: CGRectZero) 
    tableView.tableFooterView = backgroundView 


    let addButton = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: "addNewTask") 
    self.navigationItem.rightBarButtonItem = addButton 

    setupUIElements() 

    datePicker.addTarget(self, action: "datePickerValueChanged", forControlEvents: UIControlEvents.ValueChanged) 


} 

Функция:

@IBOutlet weak var datePicker: UIDatePicker! 

@IBAction func datePickerValueChanged(sender: UIDatePicker) { 
    saveTHeCourseWork("dueDate", value: sender.date) // selected date value is saved as the value for "dueDate" 
} 

Ошибка:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Program4.DetailViewController datePickerValueChanged]: unrecognized selector sent to instance 0x7fce737baa40 
+0

Имеет ли этот класс функцию, называемую datePickerValueChanged? У вас его нет в вашем коде ... – Putz1103

+0

Вы должны использовать новый синтаксис '# selector' (обновление до Swift 2.2!), Чтобы ссылаться на селектор obj-c - это, скорее всего, будет сиять свет на проблему во время компиляции. – Hamish

+0

Привет, это Swift 2.1, не объективен c. Не могли бы вы показать мне, как я все пробовал. – program4Life

ответ

1

Ваш функция имеет параметр. Это означает, что в функции требуется что-то, что нужно отправить. Это ваш sender. Когда вы добавляете свою цель, вам необходимо убедиться, что отправитель отправляется в функцию. Чтобы сделать это, просто добавьте в свою селекторную кнопку.

datePicker.addTarget(self, action: "datePickerValueChanged:", forControlEvents:.ValueChanged) 

Посмотрите, как я добавил полуточку после datePickerValueChanged. Это отправляет datePicker в функцию. Этот link может помочь вам разобраться в этом.