我什么时候应该reloadData()?

时间:2015-01-24 20:16:45

标签: ios arrays uitableview swift

我将现有应用切换到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()。什么是解决这个问题的好方法?

谢谢!

1 个答案:

答案 0 :(得分:1)

在这里你应该使用你的reloadData:

if let testVar = results {
                // Uncomment this to print all feeds
                 println(testVar)
                self.searchedPodcasts.removeAllObjects()
                self.searchedPodcasts.addObjectsFromArray(testVar)
                searchTableView.reloadData()
            }