TableView错误委托,代理从首次设置时更改

问题描述 投票:0回答:2

我收到此错误:

assert(proxy === DelegateProxy.currentDelegate(for:object),“代理从首次设置时开始更改)。

原件:(代理)

现有:(String(描述:DelegateProxy.currentDelegate(for:object)))“)

我有两个observables处理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启动之前将tableview设置为nil?

这是一个警告您先前已在某处设置委托(或数据源)的功能。您正在尝试执行的操作?将清除该委托(数据源),这意味着您设置的某些依赖于该委托(数据源)的功能可能会停止工作。如果您对此感到满意,请尝试在此操作前将委托(数据源)设置为nil

swift uitableview observable rx-swift
2个回答
0
投票

我并不完全清楚你想要实现的目标。

通常,在使用RxDataSources时,不应设置'tableView.dataSource'或'tableView.delegate'。

如果要将不同的observable作为数据源绑定到同一个tableView,那么'.switchLatest()'运算符就是您所需要的。


0
投票

每次通过RxCocoa与代理人关联时,您需要确保清洁该一次性用品,以便重复使用不同的代用品。

在swift中你不需要设置为nil,指向其他内存插槽就可以了。

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)
}
© www.soinside.com 2019 - 2024. All rights reserved.