SearchBar - Swift

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • SearchBar - Swift

    Ich habe folgenden Code. Ich habe eine TableViewController und ganz oben habe ich einen SearchDisplayController eingebaut, jetzt will ich das wenn ich in die Suchleiste klicke und was eingebe mir die richtigen Ergebnisse geliefert werden, ich kann auch schon auf die Suchleiste klicken, aber sobald ich einen Buchstaben eingebe stürzt die app mit folgender Fehlermeldung ab:

    Assertion failure in -[UISearchResultsTableView dequeueReusableCellWithIdentifier:forIndexPath:], /SourceCache/UIKit_Sim/UIKit-3347.44.2/UITableView.m:6245
    2015-08-14 08:19:25.201 Cityboom[1040:17854] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier myCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'

    Ich hab aber keine Ahnung warum, myCell heißt einfach der identifier von meiner TableViewCell in der Tabelle, was kann da falsch sein? :P

    Da komische auch daran, wenn ich unten in der SearchBar function nach dem filteredDaten.append ein println(filteredDaten) mache dann kommen auch die suchergebnisse in der Console raus, aber die app stürzt halt sofort ab sobald ich was eingebe und somit werden in der tableview auch keine Ergebnisse angezeigt.

    Quellcode

    1. override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    2. if tableView == searchDisplayController?.searchResultsTableView {
    3. return "Ergebnisse"
    4. }
    5. return daten[section][0]["telefon"]
    6. }
    7. override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    8. if tableView == searchDisplayController?.searchResultsTableView {
    9. return 1
    10. }
    11. return daten.count
    12. }
    13. override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    14. if tableView == searchDisplayController?.searchResultsTableView {
    15. return filteredDaten.count
    16. }
    17. return daten[section].count
    18. }
    19. override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    20. let myCell = tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) as! UITableViewCell
    21. if tableView == self.searchDisplayController!.active {
    22. myCell.textLabel?.text = generateTextFrom(dictionary: filteredDaten[indexPath.row])
    23. }
    24. myCell.textLabel?.text = generateTextFrom(dictionary: daten[indexPath.section][indexPath.row])
    25. return myCell
    26. }
    27. func generateTextFrom(#dictionary: [String:String]) -> String{
    28. let name = dictionary["name"]!
    29. return "\(name)"
    30. }
    31. func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
    32. filteredDaten.removeAll(keepCapacity: true)
    33. for arr in daten {
    34. for dic in arr {
    35. if (dic["name"]!.lowercaseString as NSString).rangeOfString(searchText).length != 0 {
    36. filteredDaten.append(dic)
    37. }
    38. }
    39. }
    40. }
    Alles anzeigen
  • fabian1302 schrieb:

    Ich hab aber keine Ahnung warum, myCell heißt einfach der identifier von meiner TableViewCell in der Tabelle, was kann da falsch sein?
    Daran ist nichts falsch, aber der UISearchDisplayController erzeugt eine eigene TableView. Du prüfst ja auch in deinen DataSource-Methoden, ob der übergebene tableView der searchResultsTableView ist oder nicht. Nebenbei, Zeile 25 ergibt keinen Sinn. Da prüfst du einen tableView gegen einen Bool.

    Da der UISearchDisplayController eine eigene TableView erzeugt, kennt diese keinen Reuse Identifier „myCell“. Den musst du also erst noch registrieren, bespielsweise in viewDidLoad.

    Quellcode

    1. searchDisplayController?.searchResultsTableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "myCell")

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Michael ()