RxSwift+Moya+Moya_ObjectMapper+MJRefresh,刷新失败?
Posted
技术标签:
【中文标题】RxSwift+Moya+Moya_ObjectMapper+MJRefresh,刷新失败?【英文标题】:RxSwift+Moya+Moya_ObjectMapper+MJRefresh, refresh failed? 【发布时间】:2017-06-19 14:41:27 【问题描述】:我是 RxSwift 的新手。 我想刷新 tableview 以显示新数据。我可以获取数据的第一个请求。但是当我拉下 tableview 时,请求没有完成。我对此没有任何想法?我的代码如下:
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:我的视图模型
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)
当我在请求方法处下断点时,它没有发出请求?有人知道吗?先谢谢
【问题讨论】:
【参考方案1】:有人告诉我原因,所以我写在这里。在我的 ViewModel 中,recommend
应该得到 PublishSubject
或 BehaviourSubject
或 ReplaySubject
的支持,然后我应该将 View
分享为 Observable
。在fetchRecommentList
方法中,我应该将请求绑定到创建的Subject
。
现在我已经创建了 observable,但是请求将在 subsribe
或 bind
之后运行
【讨论】:
以上是关于RxSwift+Moya+Moya_ObjectMapper+MJRefresh,刷新失败?的主要内容,如果未能解决你的问题,请参考以下文章
RxSwift/Moya - 如果通过函数返回序列将不会启动