提问者:小点点

Rx tableView只给我单元格中的最后一个值,尽管有许多数据对象


我有一个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个答案

匿名用户

1.不需要函数reloadTableViewContent(),您认为RX是命令式的。相反,只需绑定这两个主题一次,而不需要担心其余的,因为它们是反应性和响应性的。

2.请注意.toArray(),您忘记收集元素以使其成为数组。

eventService.bufferEvent.toArray().asDriver(onErrorJustReturn: []).drive(content)