Предположим, у меня есть поток собак private var dogs: Observable<[Dogs]>
. Каждый раз, когда генерируется новое значение, мой блок вызывается там, где я создаю новый источник данных и делегирую его для моего UIPickerView
, а затем в блоке я вызываю pickerView.reloadAllComponents()
, но мое представление появляется с пустым элементом pickerView, даже если запрашивается dataSource и делегат.UIPickerView не отображает данные даже после запроса
Пример кода:
self.dataStream
.subscribeNext {
self.dataSource = PickerViewDataSource(data: $0)
self.pickerView.dataSource = self.dataSource
self.delegate = PickerViewDelegate(data: $0, selectedRow: self._selectedRowStream)
self.pickerView.delegate = self.delegate
self.pickerView.reloadAllComponents()
}.addDisposableTo(self.disposeBag)
Отладка DataSource и делегат я знаю это опрашиваются и причина, почему я держать DataSource и передать ссылку на UIViewController это связано с тем, что UIPickerView
держит слабую ссылку на эти.
Эта одна из последних стратегий, которые я пробовал и по-прежнему получал тот же результат. Любая помощь будет оценена по достоинству. Благодарю.
Update:
DogPickerViewDataSource:
class DogPickerViewDataSource: NSObject, UIPickerViewDataSource {
private var dogs: [Dog]
init(
dogs: [Dog]
) {
self.dogs = dogs
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return dogs.count
}
}
DogPickerViewDelegate:
class DogPickerViewDelegate: NSObject, UIPickerViewDelegate {
private var selectedRow: BehaviorSubject<Int>
private var dogs: [Dog]
init(
dogs: [Dog],
selectedRow: BehaviorSubject<Int>
) {
self.dogs = dogs
self.selectedRow = selectedRow
}
func pickerView(pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
let dogName = (self.dogs[row].name)!
return NSAttributedString(string: dogName)
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
self.selectedRow.onNext(row)
}
}
Не могли бы вы также предоставить реализацию протокола PickerViewDataSource UIPickerViewDataSource? – iyuna
обновлено, спасибо –
Вы отлаживались, если какой-либо из методов UIPickerViewDataSource или UIPickerViewDelegate вызывается после перезагрузки функции AllComponents? – iyuna