我将现有应用切换到MVC架构。我有一个处理数据建模的Search类,我有以下功能:
func performSearch(searchTerm: String){
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(urlForQuery(searchTerm)!, completionHandler: { (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in
if (error != nil) {
println(error.localizedDescription)
}
var err: NSError?
let result: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers, error: &err) as NSDictionary
if (err != nil) {
println(err!.localizedDescription)
}
let results: NSMutableArray? = result.objectForKey("results") as? NSMutableArray
if let testVar = results {
// Uncomment this to print all feeds
println(testVar)
self.searchedPodcasts.removeAllObjects()
self.searchedPodcasts.addObjectsFromArray(testVar)
}
})
task.resume()
}
这基本上查询iTunes api并返回结果的Array(searchingPodcasts)。当这些对象被添加到数组中时,我想在tableView中使用reloadData()。我理解在这个函数中调用像TableViewController.tableView!.reloadData()这样的东西是不好的做法,但是一旦将对象添加到数组中我该怎么做呢?
我有一种解决方法,我对我的TableViewController类不满意:
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
println("text did change")
let length = countElements(searchText)
if (length <= 3) {
searchModel.resetSearch()
searchTableView.reloadData()
} else if (length > 3) {
searchModel.performSearch(searchText)
searchTableView.reloadData()
}
}
这会重新加载表视图,但只有在searchBar上调用textDidChange时,这意味着一旦数组中添加了对象,就需要在searchBar中添加/删除一个字符来调用reloadData()。什么是解决这个问题的好方法?
谢谢!
答案 0 :(得分:1)
在这里你应该使用你的reloadData:
if let testVar = results {
// Uncomment this to print all feeds
println(testVar)
self.searchedPodcasts.removeAllObjects()
self.searchedPodcasts.addObjectsFromArray(testVar)
searchTableView.reloadData()
}