Ho una ricerca che scarica un file JSON e visualizza i risultati in un TableView. Se l'utente cerca qualcosa e ottiene un elenco di risultati, cerca qualcos'altro che restituisce 0 risultati. Il primo set di risultati è ancora in TableView. Voglio cancellare TableView ogni volta che inizia una nuova ricerca per evitare che ciò accada. Ho provato a impostare l'origine dati su zero e ricaricare il TableView ma non funziona. Ecco cosa ho:Swift - Clear TableView
var searchResults : [[String : AnyObject]]? = nil
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
print("DEBUG: searchBarSearchButtonClicked")
if searchBar.text > "" {
//--- This isn't working ---
searchResults = nil
tableView.reloadData()
//--------------------------
activityIndicator.startAnimating()
dbSearcher.startSearch(searchBar.text!) { (results) ->() in
self.searchResults = results
self.activityIndicator.stopAnimating()
self.tableView.reloadData()
}
searchBar.endEditing(true)
}
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if searchResults != nil {
print("DEBUG: Result count \(searchResults!.count)")
return searchResults!.count
} else {
print("DEBUG: Result count 0") //I don't see this other than when the ViewController first loads
return 0
}
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier("searchResult")!
cell.textLabel?.text = searchResults![indexPath.row]["Title"] as? String
cell.detailTextLabel?.text = searchResults![indexPath.row]["Year"] as? String
//Display cover
let imageURL = searchResults![indexPath.row]["Poster"] as? String
if imageURL != "N/A" {
if let cover : UIImage = searchResults![indexPath.row]["Image"] as? UIImage {
cell.imageView?.image = cover
} else {
//Use default cover while the correct image downloads
//cell.imageView?.image = DEFAULT_COVER
downloadCover(imageURL!, tableViewRow: indexPath.row)
}
} else {
//Use default cover
//cell.imageView?.image = DEFAULT_COVER
}
return cell
}
Ho provato il modo in cui si ripristina la vista tabella e funziona per me. Il tavolo si svuota. Nella tua domanda scrivi che hai impostato il tuo data source a zero. Lo fai ancora da qualche altra parte? – joern
No, lo faccio solo in searchBarSearchButtonClicked (...). Quando dico di averlo impostato su zero, intendo dove creo tempDict come dizionario nil e imposto searchResults = tempDict. Ho provato a fare searchResults = nil ma mi ha dato un errore. – Daniel
Che tipo di errore si verifica quando si tenta di impostare 'searchResults = nil'? Non dovrebbe causare un errore. – joern