RxSwift crash“也许代理已经被设置在xib或storyboard中,现在它被代码覆盖了。”
问题描述:
我使用两个不同的数据源绑定tableview,例如一个带有实际结果,另一个数组带有点击范围按钮后的过滤器RxSwift crash“也许代理已经被设置在xib或storyboard中,现在它被代码覆盖了。”
func bind() {
self.searchBar.rx.searchButtonClicked
.throttle(0.3, scheduler: MainScheduler.instance)
.flatMapLatest { [weak self] _ -> Observable<[String]> in
guard let `self` = self else { return .just([]) }
guard let query = self.searchBar.text else { return .just([]) }
self.view.endEditing(true)
self.loadingText.isHidden = false
let items = self.githubService.search(query: query)
self.githubService.searchItems = items
return items
}
.bind(to: self.tableView.rx.items(cellIdentifier: "cell")) { row, name, cell in
self.loadingText.isHidden = true
cell.textLabel?.text = name
}
.disposed(by: self.disposeBag)
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.tableView.frame = self.view.bounds
}
}
func searchBar(_ searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) {
//filterContentForSearchText(searchBar.text!, scope: searchBar.scopeButtonTitles![selectedScope])
let filteredResult = self.githubService.filteredSearch(index: selectedScope)
filteredResult
.bind(to: self.tableView.rx.items(cellIdentifier: "cell")) { row, name, cell in // Getting crash here
self.loadingText.isHidden = true
cell.textLabel?.text = name
}
.disposed(by: self.disposeBag)
}
这是我使用的过滤器的方法。
func filteredSearch(index:Int) -> Observable<[String]> {
guard index > 0 else { return .just([]) }
return searchItems!.filter { $0.contains("a")}
}
答
的错误是很明确的,你不能有2点不同的数据源。相反,你可以改变2组数据之间的datSource的内容
我建议您使用RxDataSources