2017-07-03 11 views
1

RxSwiftで最新バージョンのMoyaを使用していますが、解決策が見つからないという論理的な問題が発生しました。RxMoyaでリクエストを繰り返す

のは、私は、次のインタフェースを実装するのViewModelでのUITableViewControllerを持っているとしましょう:

protocol ListViewModelType { 

    var items: Observable<[Item]> { get } 

} 

itemsプロパティが(EVReflectionを使用して)として実装されていますのviewDidLoadメソッドで

var items: Observable<[Therapy]> { 
     get { 
      let provider = RxMoyaProvider<ItemService>() 
      return provider 
       .request(.all) 
       .map(toArray: Item.self) 
     } 
    } 

UITableViewControllerを使って、itemsプロパティとtableViewの間のバインドを次のコードで設定しました:

self.viewModel.items 
      .bind(to: tableView.rx.items(cellIdentifier: cellIdentifier, cellType: cellType)) { row, element, cell in 
       // cell configuration code 
      } 
      .disposed(by: self.disposeBag) 

今、ユーザーがアプリケーションの他の部分で行った変更を反映するために、UITableViewのコンテンツを更新したいと思います。 RxMoyaProviderがObservableを返すことを考慮すると、これはObservableによって発行された別の値を使って簡単に実行する必要がありますが、サーバーからコンテンツを更新して同じObservableに配置する必要があることをプロバイダに通知する方法はわかりません。

ここに何か不足していますか? UITableViewをRxMoyaProviderから来るオブジェクトのリストにバインドする方法をお勧めしますか?

答えて

1

Moyaのリクエストをリロードする必要があります。これは少しハッキーですが、私はあなたがヒントを得ると思います。

let didAppear = Variable(true) 
override func viewDidAppear(_ animated: Bool) { 
    didAppear.value = true 
} 

override func viewDidLoad(){ 
    self.didAppear.flatMap{ _ in self.viewModel.items} 
     .bind(to: tableView.rx.items(cellIdentifier: cellIdentifier, cellType: cellType)) { row, element, cell in 
      // cell configuration code 
     } 
     .disposed(by: self.disposeBag) 
} 

代わりに、あなたは[OK]を、私はオフラインで第一主義のあなたのポイントを参照して、現時点では要件の外にあると私オフライン第一主義

enter image description here

+0

で私たちのアーキテクチャを再設計できオンラインのみに固執することを好みます。あなたが提案している方法は、ハックのように思えます... MoyaProviderのラッパーのようなものを使ってこれを実装する方法はないのでしょうか? – MrAsterisco

+0

私は本当にそれを行うためのポイントが表示されません。最初にオフラインではない –

+0

まあ、サーバーの回答が時間とともに変化する状況をサポートすることがポイントです。 ObservablesはデータのストリームとIMHOとして記述されていますが、これはまさに私がここにあるものです。リフレッシュするたびに新しい値を放出するデータストリームです。 – MrAsterisco

関連する問題