2016-12-29 4 views
0

Я использую RxSwift 3.1 (Galois) через Carthage в своем новом проекте, и я просто попытался привязать данные к UITableView, используя некоторые примеры, которые я нашел в Интернете и в документации - один из них быть этот файл: https://github.com/ReactiveX/RxSwift/blob/master/RxExample/RxExample/Examples/SimpleTableViewExample/SimpleTableViewExampleViewController.swiftRxSwift 3.1 Источник данных UITableView не работает

Мой код выглядит это прямо сейчас (я пытался немой его вниз уже потому, что я хотел работать не делал):

class ChooseCityView: UIViewController, UITableViewDelegate { 

    @IBOutlet weak var tableView: UITableView! 

    override func viewDidLoad() { 

     super.viewDidLoad() 

     let dataSource = Observable.just((0..<20).map { "\($0)" }) 
     let disposeBag = DisposeBag() 

      dataSource.bindTo(tableView.rx.items(cellIdentifier: "CityCell", cellType: UITableViewCell.self)) { 
       (row, city, cell) in 
       cell.backgroundColor = .white 
       cell.textLabel?.text = "test \(city)" 
      }.addDisposableTo(disposeBag) 

     // Remove empty cells 
     tableView.tableFooterView = UIView() 

    } 
} 

Тем не менее, после запуска приложение в симуляторе, это не покажет никаких строк. У меня есть прототип ячейки на tableView под названием «CityCell» с типом Basic. Кроме того, я убедился, что розетка связана с фактическим tableView. Что я могу делать неправильно? Или это ошибка?

Заранее спасибо

+0

Ваш пример не будет создан, 'dataSource не имеет связи с пользователем. –

+0

Код компилируется и запускается, и это то же самое, что указано в примере. Я использую Observer.just, который возвращает ObservableType, у которого есть метод bindTo. – Suryu

+0

Проблема заключается в том, что после запуска в таблице нет ячеек, отражающих источник данных – Suryu

ответ

1

Через некоторое время я нашел решение. Добавьте disposeBag как свойство контроллера представления. Для вашего кода:

class ChooseCityView: UIViewController, UITableViewDelegate { 

    @IBOutlet weak var tableView: UITableView! 
    let disposeBag = DisposeBag() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let dataSource = Observable.just((0..<20).map { "\($0)" }) 

     dataSource.bindTo(tableView.rx.items(cellIdentifier: "CityCell", cellType: UITableViewCell.self)) { 
      (row, city, cell) in 
      cell.backgroundColor = .white 
      cell.textLabel?.text = "test \(city)" 
      }.addDisposableTo(disposeBag) 

     // Remove empty cells 
     tableView.tableFooterView = UIView() 
    } 
} 
+0

Вау, это действительно работает! Я пробовал все остальное часами ... Я бы никогда не догадался, что это может быть проблемой :) Большое вам спасибо! – Suryu