1

Ich versuche, die Suche in UITableViewController zu implementieren, aber nicht basierend auf dem Filtern vorhandener Array, sondern Aufruf meiner API zum Suchen von Werten in Remote-Datenbank.Nein Ergebnisse beim Anzeigen der Suchergebnisse in TableView - swift

Ich dachte, ich habe alles korrekt implementiert, weil meine textDidChange und cellForRowAtIndexPath Methoden in der richtigen Zeit aufgerufen werden und mein Datenarray hat alle Daten, die ich brauche. ABER - nichts taucht in meinem TableView auf! Es sagt immer "Keine Ergebnisse". Ich kann keine existierenden Lösungen für SO finden, da viele Klassen in iOS 8 veraltet waren und ich Probleme damit habe, neue zu implementieren. Jede Hilfe wird geschätzt! Mein Code:

class QuestionsController: UITableViewController, UISearchResultsUpdating, UISearchBarDelegate { 

    @IBOutlet weak var searchBar: UISearchBar! 
    var searchController = UISearchController() 
    var searchText: String? 
    var areSearchResultsExhausted: Bool = false 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.searchController = UISearchController(searchResultsController: self) 
     self.searchBar.delegate = self 
     self.searchController.searchResultsUpdater = self 
     self.searchController.hidesNavigationBarDuringPresentation = false 
     self.searchController.dimsBackgroundDuringPresentation = false 
     self.searchController.searchBar.sizeToFit() 
     self.getQuestionsData(0, searchText: nil) 
    } 

    var questionsDataObjects = [Question]() 

    // MARK: - Get data from API 
    func getQuestionsData(startFromQuestionId: Int, searchText: String?) { 
     // Getting data from API stuff like: 
     let task = session.dataTaskWithRequest(req) { ... } 
     questionsDataObjects.append(...) 
     self.tableView.reloadData() 
    } 

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return questionsDataObjects.count 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = self.tableView.dequeueReusableCellWithIdentifier("QuestionCell", forIndexPath: indexPath) as! BasicQuestionCell 

     // Populate the table view cells 
     let questionCell = questionsDataObjects[indexPath.row] 
     cell.titleLabel.text = questionCell.content 

     // Load more results when user scrolled to the end 
     if (indexPath.row == questionsDataObjects.count-1 
      && questionsDataObjects.count > indexPath.row 
      && !areSearchResultsExhausted) { 
      print("qDO.count: \(questionsDataObjects.count) ; indexPath.row: \(indexPath.row)") 
      self.getQuestionsData(indexPath.row + 1, searchText: self.searchText) 
     } 

     return cell 
    } 

    // Handle searching 
    func searchBar(searchBar: UISearchBar, textDidChange searchText: String) { 
     self.searchText = searchText 
     self.areSearchResultsExhausted = false 
     questionsDataObjects.removeAll() 
     self.getQuestionsData(0, searchText: searchText) 
     tableView.reloadData() 
    } 

    func searchBarCancelButtonClicked(searchBar: UISearchBar) { 
     self.searchText = nil 
     self.areSearchResultsExhausted = false 
     questionsDataObjects.removeAll() 
     self.getQuestionsData(0, searchText: searchText) 
    } 

    func updateSearchResultsForSearchController(searchController: UISearchController) { 

    } 

Zwei weitere wichtige Dinge:

1) updateSearchResultsForSearchController wird nie genannt!

2) Ich habe einen Fehler in der Konsole, die sagt: Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior (<UISearchController...>) aber wenn ich dieses Problem zu lösen versucht, meine Suchleiste gestoppt VOLLSTäNDIG arbeiten ...

Antwort

2

Verstanden. Das Problem war: Als ich die Suchleiste in Storyboard gezogen habe, wählte ich "Search Bar und Search Display Controller" statt "Search Bar" selbst. Search Display Controller, der in iOS8 und höher veraltet ist, hat den Code nicht funktionieren lassen.

Also musste ich den Search Display Controller aus der Document Outline löschen, die Ausgänge wieder mit der neuen Search Bar verbinden und es funktionierte. Hoffe es hilft jemandem.

+0

sollten Sie dies als Ihre akzeptierte Antwort markieren. –

+1

@MaxvonHippel Sie können Ihre eigene Antwort nur annehmen nach 2 Tagen der Veröffentlichung – jwitos

+0

Haha oh ok Entschuldigung, ich habe vergessen, das ist eine rep Sache. Danke, dass du mich erinnert hast –