我收到此错误:
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
。
我并不完全清楚你想要实现的目标。
通常,在使用RxDataSources时,不应设置'tableView.dataSource'或'tableView.delegate'。
如果要将不同的observable作为数据源绑定到同一个tableView,那么'.switchLatest()'运算符就是您所需要的。
每次通过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)
}