1

UITableView Biding に RxCoCoa と RxSwift を使用しています。問題は、接続が失われたとき、またはサーバーエラー以外の他の接続エラー(私はそれらを処理しました)が、以下で説明するバインディングエラーのためにアプリがクラッシュした場合です。私の質問は、接続エラーを処理する方法ですか?

fileprivate func getNextState() {
        showFullPageState(State.LOADING)
        viewModel.getProductListByID(orderGroup: OrderGroup.SERVICES.rawValue)
                .do(onError: {
                    showStatusError(error: $0)
                    self.showFullPageState(State.CONTENT)
                })
                .filter {
                    $0.products != nil
                }
                .map {
                    $0.products!
                }
                .bind(to: (self.tableView?.rx.items(cellIdentifier: cellIdentifier, cellType: ProductCell.self))!) {
                    (row, element, cell) in
                    self.showFullPageState(State.CONTENT)
                    cell.product = element
                }

                .disposed(by: bag)
        self.tableView?.rx.setDelegate(self).disposed(by: bag)
    }

これは私のViewModelです:

func getProductListByID(orderGroup: String, page: String = "1", limit: String = "1000") -> Observable<ProductRes> {
        return orderRegApiClient.getProductsById(query: getProductQueryDic(stateKey: getNextStateID(product: nextProduct)
                , type: orderGroup, page: page, limit: limit)).map {
            try JSONDecoder().decode(ProductRes.self, from: $0.data)
        }.asObservable()
    }

そして、私はこのようにネットワーク層に Moya を使用しています:

func getProductsById(query: [String: String]) -> Single<Response> {
        return provider.rx.request(.getProductsById(query))
                .filterSuccessfulStatusCodes()
    }

ここに画像の説明を入力

4

1 に答える 1