gpt4 book ai didi

ios - RxSwift+Moya+Moya_ObjectMapper+MJRefresh,刷新失败?

转载 作者:行者123 更新时间:2023-11-30 12:22:24 25 4
gpt4 key购买 nike

我是 RxSwift 新手。 我想刷新表格 View 以显示新数据。我可以获得数据的第一个请求。但是当我拉下表格 View 时,请求尚未完成。我对此没有任何想法?我的代码如下:

1:我的viewController的代码:

class RecommendViewController: UIViewController {

lazy var tableView = DefaultManager.createTableView(HomeImageCell.self,
HomeImageCell.idenfitier)
let disposeBag = DisposeBag()
lazy var viewModel = HomeViewModel()
lazy var dataSource: [HomeListDetailModel] = []

override func viewDidLoad() {
super.viewDidLoad()
viewModel.fetchRecommendList("answer_feed",0)
setupTableView()
configureRefresh()
bindDataToTableView()
}

func setupTableView() {
view.addSubview(tableView)
tableView.snp.makeConstraints { (make) in
make.edges.equalTo(0)
}
tableView.estimatedHeight(200)
}

func bindDataToTableView() {
viewModel.recommend
.observeOn(MainScheduler.instance)
.do(onNext: { [unowned self] model in
print("endAllRefresh")
self.endAllRefresh()
}, onError: { (error) in
self.endAllRefresh()
print("error = \(error)")
})
.map { [unowned self] model in
return self.handleData(model)
}.bind(to: tableView.rx.items(cellIdentifier: HomeImageCell.idenfitier , cellType: HomeImageCell.self )) { index, model, cell in
cell.updateCell(data: model)
}.disposed(by: disposeBag)
}

func configureRefresh() {
tableView.mj_header = MJRefreshNormalHeader(refreshingBlock: { [unowned self] in
let model = self.dataSource[0]
self.viewModel.fetchRecommendList("answer_feed",model.behot_time)

})
tableView.mj_footer = MJRefreshAutoNormalFooter(refreshingBlock: { [unowned self] in
let model = self.dataSource[self.dataSource.count - 1]
self.viewModel.fetchRecommendList("answer_feed",model.behot_time)
})
}

func endAllRefresh() {
self.tableView.mj_header.endRefreshing()
self.tableView.mj_footer.endRefreshing()
}

func handleData(_ model: HomeListModel) -> [HomeListDetailModel] {
guard let data = model.detailData else {
return dataSource
}
self.dataSource = data
return data
}
}

2:我的 View 模型

protocol HomeProtocol {
func fetchRecommendList(_ category: String, _ behot_time: Int)
}

class HomeViewModel: HomeProtocol {
lazy var provider = HTTPServiceProvider.shared
var recommend: Observable<HomeListModel>!

init() {}

init(_ provider: RxMoyaProvider<MultiTarget>) {
self.provider = provider
}

func fetchRecommendList(_ category: String, _ behot_time: Int) {
recommend = provider.request(MultiTarget(HomeAPI.homeList(category: category,behot_time: behot_time)))
.debug()
.mapObject(HomeListModel.self)
}
}

当我在请求方法上设置断点时,它没有执行请求?有人知道吗?先谢谢了

最佳答案

有人告诉我原因,所以我写在这里。在我的 ViewModel 中,recommend 应该由 PublishSubjectBehaviourSubjectReplaySubject 支持,然后我应该将其分享给 查看作为Observable。在 fetchRecommentList 方法中,我应该将请求绑定(bind)到创建的 Subject。现在我已经创建了可观察的,但请求将在 subsribebind

之后运行

关于ios - RxSwift+Moya+Moya_ObjectMapper+MJRefresh,刷新失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44633526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com