My search bar doesn't display the searched content in my table view

Viewed 60

I feel stuck at the moment with this search bar. It successfully connect to my SQL database and my search.php file successfully search and prints the searched content. It won't show results in my table view and when I type a song in the search bar and press done it does nothing. I will show my whole SearchViewController code and ill add any additional files if necessary. Any help would be appreciated!

@IBOutlet weak var searchBar: UISearchBar!

@IBOutlet weak var tableView: UITableView!

let url = URL(string: "http://127.0.0.1/musicfiles/search.php")
var filteredData: [Search] = []
var shouldShowSearchResults = false
var search: [Search] = []
var filePath = "http://127.0.0.1/musicfiles/search.php"

override func viewDidLoad() {
    super.viewDidLoad()
    
    tableView.delegate = self
    tableView.dataSource = self
    searchBar.delegate = self
    searchBar.returnKeyType = UIReturnKeyType.done
    
   let task = URLSession.shared.dataTask(with: url!) { (data, snapshot, error) in
         

           let retrievedList = String(data: data!, encoding: String.Encoding.utf8)
                 print(retrievedList!)
                 self.parseSongs(data: retrievedList!)
                }
task.resume()
}

func parseSongs (data: String) {
  
    if (data.contains("*")) {
        let dataArray = (data as String).split(separator: "*").map(String.init)
        for item in dataArray {
            let itemData = item.split(separator: ",").map(String.init)
            let searchSong = Search(songname: itemData[0])
    search.append(searchSong!)
        
            for s in search {
            print(s.searchSongName())
        }
            self.filteredData = self.search
        DispatchQueue.main.async {
            
            self.view.layoutIfNeeded()
          self.tableView.reloadData()
        }
      }
    }
}


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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! DataCell
    let song = filteredData[indexPath.row].searchSongName()
    cell.congigureCell(text: song)
    return cell
    
}
        
        

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    
    let searchSong = filteredData[indexPath.row].searchSongName()
    let fileURLString = "\(filePath)\(searchSong)"
    print(fileURLString)

}
   func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

    if (searchBar.text ?? "").isEmpty {
           
        view.endEditing(true)
        
           
        filteredData = search
       
       } else {
            shouldShowSearchResults = true
        filteredData = search.filter({ (songName) -> Bool in
            songName.searchSongName().range(of: searchText) != nil
        })
       }
    DispatchQueue.main.async {
        self.tableView.reloadData()
        
    }
   }
}

Search.swift:

class Search {

var search: Search!

var songname = String()

init?(songname:String) {
    self.songname = songname
}

func searchSongName() -> String {
    return songname
}
}
0 Answers
Related