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