我有一个RXTableView
,它正在绑定来自中继
的数据。 当我在绑定
之前检查数据时,我得到大约10个数据对象,但TableView
单元格
只显示最后一个。
在我的ViewModel
中,我有一个重新加载方法
:
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().DisposeBag)
并设置绑定
:
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
只显示最后一个对象,但由于某种原因忽略其余的对象。
为什么这行不通? 如果需要显示其他代码,请通知我,例如单元格
。
1.不需要函数reloadTableViewContent(),您认为RX是命令式的。相反,只需绑定这两个主题一次,而不需要担心其余的,因为它们是反应性和响应性的。
2.请注意.toArray()
,您忘记收集元素以使其成为数组。
eventService.bufferEvent.toArray().asDriver(onErrorJustReturn: []).drive(content)