我有一个RxTableView
,它正在绑定来自relay
的数据。当我检查binding
之前的数据时,大约有10个数据对象,但是tableView
cell
仅显示最后一个数据对象。
在我的viewModel
中,我重新加载了method
:
var bufferEvent = ReplaySubject<EventModel>.create(bufferSize: 99)
let content = BehaviorRelay<[EventStatusTableViewCellViewModel]>(value: [])
func reloadTableViewContent() -> Observable<EventModel> {
return eventService.bufferEvent.do(onNext: { event in
print("THIS RETURNS 8 OBJECTS", event.id)
self.content.accept([EventStatusTableViewCellViewModel(eventStatus: event)])
})
}
打印返回8个对象。在我的viewController
中,我叫viewModel.reloadTableViewContent().subscribe().disposed(by: diposeBag)
并设置bindings
:
private func setBindings() {
print("THIS IS ZERO", viewModel.content.value.count)
viewModel.content.bind(to: tableView.rx.items(cellIdentifier: EventLogTableViewCell.identifier, cellType: EventLogTableViewCell.self)) { row, data, cell in
cell.viewModel = data
}.disposed(by: disposeBag)
}
tableView
仅显示最后一个对象,但由于某些原因而忽略其余对象。
为什么这不起作用?让我知道是否需要显示其他代码,例如cell
。
1。不需要功能reloadTableViewContent(),您认为RX是必须的。相反,只需将这两个主题绑定一次,而不必担心其余主题,因为它们是反应性和响应性的。
2。通知.toArray()
,您忘了收集元素以使其成为数组。
eventService.bufferEvent.toArray().asDriver(onErrorJustReturn: []).drive(content)