Используйте UISearchBar с базой данных Firebase - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь использовать UISearchBar с Firebase, но я получаю сообщение об ошибке при попытке ввести любое правильное слово

  • Мой код

    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var searchBar: UISearchBar!
    var isSearching: Bool = false
    //list to store all the artist
    var hotelList = [hotelsModel]()
    var filterHotels = [hotelsModel]()
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    
    if isSearching{
        return filterHotels.count
    } else {
    return hotelList.count
      }
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    //creating a cell using the custom class
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! hotelsTableViewCell
    
    //the artist object
    let hotel: hotelsModel
    //getting the artist of selected position
    hotel = hotelList[indexPath.row]
    
    //adding values to labels
    cell.lblName.text = hotel.name
    cell.lblLocation.text = hotel.location
    cell.appSuggest.text = hotel.appSuggest
    cell.price.text = hotel.price
    cell.canceletion.text = hotel.cancelation
    cell.paymentNeeded.text = hotel.paymentNeeded
    if isSearching{
        cell.lblName?.text = filterHotels[indexPath.row].name
    }
    
    return cell
    }
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    
    if searchBar.text == nil || searchBar.text == "" {
        isSearching = false
        view.endEditing(true)
        tableView.reloadData()
    } else {
        isSearching = true
        filterHotels = hotelList.filter({$0.name == searchBar.text})
        tableView.reloadData()
    }
    }
    
  • в этой строке

    if isSearching{
    
        cell.lblName?.text = filterHotels[indexPath.row].name
    }
    

    https://i.stack.imgur.com/wSsP4.png

  • это мои файлы кода если кто-то может проверить это

    https://github.com/HaMaDaRaOuF/UISearchBar-Firabse

спасибо

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Спасибо, ребята, моя проблема, она была в количестве строк в разделе Функция, она не возвращается за filterHotels Я редактирую свой вопрос, если кому-то нужен код, я также буду редактировать его в github

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) ->  Int { if isSearching{ return filterHotels.count } else { return hotelList.count } }
0 голосов
/ 19 ноября 2018

Я предлагаю вам изменить процесс фильтрации (что-то вроде этого):

func filterContentForSearchText(_ searchText: String) {

    let pred = NSPredicate(format: "name contains[cd] %@", searchText)
    filteredHotels = hotelList?.filtered(using: pred) as? [hotelsModel]

    tableView.reloadData()
}

и изменить переменную isSearching на:

var isSearching: Bool {
    return searchBar.text != ""
}

Используйте отладчик, чтобы увидетьЗначение indexPath.row в строке, которая вызывает ваш сбой.

...