Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios RxSwift+;莫亚+;Moya#u ObjectMapper+;刷新,刷新失败?_Ios_Swift_Uitableview_Rx Swift_Moya - Fatal编程技术网

Ios RxSwift+;莫亚+;Moya#u ObjectMapper+;刷新,刷新失败?

Ios RxSwift+;莫亚+;Moya#u ObjectMapper+;刷新,刷新失败?,ios,swift,uitableview,rx-swift,moya,Ios,Swift,Uitableview,Rx Swift,Moya,我是RxSwift的新手我想刷新tableview以显示新数据。我可以获取数据的第一个请求。但是当我打开tableview时,请求没有完成。我对此一无所知?我的代码如下: 1:我的viewController代码: class RecommendViewController: UIViewController { lazy var tableView = DefaultManager.createTableView(HomeImageCell.self,

我是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:我的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)
    } 
 }
协议家庭协议{
func fetchRecommendList(uu类别:字符串,uuBehot_u时间:Int)
}
类HomeViewModel:HomeProtocol{
lazy var provider=HTTPServiceProvider.shared
var推荐:可观察!
init(){}
init(u提供程序:RxMoyaProvider){
self.provider=提供程序
}
func fetchRecommendList(uu类别:字符串,uuBehot_u时间:Int){
推荐=provider.request(多目标(HomeAPI.homeList(类别:category,behot\u time:behot\u time)))
.debug()
.mapObject(HomeListModel.self)
} 
}

当我在请求时创建断点方法时,它没有执行请求吗?有人知道吗?首先谢谢有人告诉我原因,所以我写在这里。在我的视图中,model
推荐
应该由
发布主题
行为主题
重播主题
支持,然后我应该将其作为
可观察的
分享给
视图
。在
fetchRecommentList
方法中,我应该将请求绑定到创建的
主题
。 现在我已经创建了observable,但请求将在
subscribe
bind
之后运行