2017-06-19 9 views
0

私はRxSwiftより新しいです。 新しいデータを表示するためにテーブルビューを更新したい。データを取得できる最初のリクエスト。しかし、私がtableviewをプルダウンすると、リクエストは完了しませんでした。私はこれについて考えていない?私のコードはbelowingさ:RxSwift + Moya + Moya_ObjectMapper + MJRefresh、リフレッシュに失敗しましたか?

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:私は、リクエストメソッドにブレークポイントを作ったときに私のViewModel

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) 
    } 
} 

は、その要求をしませんでしたか?誰もそれを知っていますか?ありがとうございました

答えて

0

Someoneが私に理由を言ったので、ここに書きます。私のViewModelでrecommendPublishSubjectまたはBehaviourSubjectまたはReplaySubjectでバックアップされている必要があります。Viewの場合はObservableとしてこれを共有してください。 fetchRecommentListメソッドでは、作成するリクエストをバインドする必要があります。Subject 観測可能に作成しましたが、リクエストはsubsribeまたはbind

の後に実行されます
関連する問題