Делегат ошибки TableView, прокси-сервер изменился с момента его первой установки - PullRequest
0 голосов
/ 01 октября 2018

Я получаю эту ошибку:

assert (proxy === DelegateProxy.currentDelegate (for: object), "Прокси-сервер изменен с момента его первой установки.

Оригинал: (прокси)

Существующий: (Строка (описывающая: DelegateProxy.currentDelegate (for: object))) ")

У меня есть две наблюдаемые, которые обрабатывают раскадровку xib в разных состоянияхно как только один из них был загружен, я получаю сообщение об ошибке выше, я попытался использовать self.tableView.delegate = nil & self.tableView.dataSource = nil, но это вызывает функцию .bind(to:).Моя проблема в том, что я не знаю, как с этим справиться до этой ошибки:

Утверждение не выполнено: прокси-сервер изменился с момента его первой установки.

Оригинал:

.asObservable().bind(to:(tableView?.rx.items(cellIdentifier: 
      aTableViewCell.Identifier, cellType: HaTableViewCell.self))!


func initTableView() {

    // pull to refresh
    aViewModel
        .isLoading
        .asObservable()
        .subscribe({ (loading) in
            if loading.element == false { 
            } else {
                self.tableView!.delegate = self // loads a shimmering view
                self.tableView!.dataSource = self
            }
        })
        .disposed(by: disposeBag)

    aViewModel
        .datas
        .asObservable()
        .bind(to:(tableView?.rx.items(cellIdentifier: aTableViewCell.Identifier, cellType: HaTableViewCell.self))!) { (index, element, cell) in
         // when the data is fired load this tableview cell
        }.disposed(by: disposeBag)
}

Как можно установить нулевое представление таблицы перед тем, как сработают данные Observables?

Эта функция предупреждает вас, что где-то ранее уже был установлен делегат (или источник данных),Действие, которое вы пытаетесь выполнить?очистит этот делегат (источник данных), а это означает, что некоторые из ваших функций, которые зависят от того, какой делегат (источник данных) установлен, скорее всего, перестанут работать.Если вы согласны с этим, попробуйте установить делегат (источник данных) на nil перед этой операцией.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2019

Каждый раз, когда вы связываетесь с делегатом через RxCocoa, вы должны убедиться, что вы очищаете этот одноразовый материал для повторного использования с другим.

В swift вам не нужно устанавливать в ноль, указываяна другой слот памяти сделает всю работу.

func refreshTableView() {

disposable = DisposeBag()
// pull to refresh
aViewModel
    .datas
    .asObservable()
    .bind(to:(tableView?.rx.items(cellIdentifier: aTableViewCell.Identifier, cellType: HaTableViewCell.self))!) { (index, element, cell) in
     // when the data is fired load this tableview cell
    }.disposed(by: disposeBag)
}
0 голосов
/ 02 октября 2018

Мне не совсем понятно, чего вы пытаетесь достичь.

В общем, вы должны не устанавливать 'tableView.dataSource' или 'tableView.delegate' при использовании RxDataSourcesс ним.

Если вы хотите привязать различные наблюдаемые в качестве источника данных к одному и тому же табличному представлению, вам нужен оператор .switchLatest ().

...