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

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

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

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

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

У меня есть две наблюдаемые, которые обрабатывают раскадровку 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 перед этой операцией.

1 ответ

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

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

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

Каждый раз, когда вы связываетесь с делегатом через 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)
}
Другие вопросы по тегам