Невозможно назначить делегат UIPickerView или источник данных - PullRequest
0 голосов
/ 27 февраля 2019

По какой-то причине я не могу присвоить источник данных или делегат UIPickerView моему NSObject.

У меня есть NSObject, который расширяет UIPickerViewDataSource и UIPickerViewDelegate

class STRepeatPicker: NSObject, UIPickerViewDataSource, UIPickerViewDelegate {

    let options = ["One", "Two", "Three", "Four", "Five"]

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return self.options.count
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return options[row]
    }

}

И у меня есть UIViewController, который пытается установить источник данных и делегировать.Это UIPickerView внутри UITableViewCell.

Я создаю объект сверху:

let repeatPickerDataSource = STRepeatPicker()

, а затем в cellForRowAt: Я пытаюсь установить источник данных и делегировать.

let cell = tableView.dequeueReusableCell(withIdentifier: "pickerCell", for: indexPath) as! PickerTableViewCell

cell.picker.delegate? = repeatPickerDataSource
cell.picker.dataSource? = repeatPickerDataSource

return cell

Когда я запускаю это, он вылетает, если я отлаживаю и пытаюсь распечатать cell.picker.delegate, я получаю ошибку: Unexpectedly found nil while unwrapping an Optional value

Кто-нибудь знает, как я могуназначить UIPickerViewDelegate и UIPickerViewDataSource для объекта NSO следующим образом?

1 Ответ

0 голосов
/ 27 февраля 2019

Проблема заключалась в том, что я неправильно регистрировал свою ячейку, я регистрировал ее как

self.tableView.register(UIPickerViewDelegate.self, forCellReuseIdentifier: "pickerCell")

, когда это должно было быть так:

self.tableView.register(UINib.init(nibName: "PickerTableViewCell", bundle: nil), forCellReuseIdentifier: "pickerCell")
...