2017-08-29 6 views
0

実際の結果を含む2つの異なるデータソースとスコープボタンのフィルタをクリックした後の別の配列でtableviewをバインドします。RxSwiftクラッシュ「xibやストーリーボードでデリゲートが既に設定されていて、コードで上書きされている可能性があります」

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")} 
} 

答えて

0

エラーは、2つの異なるデータソースを持つことができない、かなり明示的です。代わりに、あなたは、データの2セット間のあなたのdatSourceの内容を変更することができます。

ご利用をお勧めしますRxDataSources

関連する問題