gpt4 book ai didi

ios - 在 Swift 中从异步数据更新 TableView

转载 作者:搜寻专家 更新时间:2023-11-01 06:45:25 26 4
gpt4 key购买 nike

我目前正在开发一个 iOS 应用程序,我最近遇到了同步下载和解析数据的问题,结果导致该应用程序完全没有响应。

我已经更新了我的代码以下载我的数据并异步解析它,但是我现在遇到了另一个问题。

我一直在尝试拆分我的代码并遵循 MVC 模式。我将 TableViewController 作为 TableView 的委托(delegate)和数据源。我有另一个类正在管理下载+解析我的数据。

我的问题是,一旦数据被解析 - 我该如何更新 TableView,因为它都是异步完成的。

表格 View Controller

func searchBarSearchButtonClicked(searchBar: UISearchBar) {
println(searchBar.text)

searchBar.resignFirstResponder() //Hide the keyboard

let result = ShowsDataParser.newSearchShows(searchBar.text) //Get search result based on input
searchResults = result.results
maxPages = result.maxPages
currentPage = 1
self.tableView.reloadData()
}

我也在这个类中实现了所有必需的方法(例如 cellForRowAtIndexPath)。

ShowsDataParser

class func newSearchShows(input: String, page:Int = 1) -> (results:[Show], maxPages: Int)
{
let searchUrl = "/search/tv" //Search URL
var searchResults = [Show]()
var totalPages = 1

let posterSize = "w92"

if let escapedSearch = escapeString(input) {
var search = apiLocation + searchUrl + "?query=" + escapedSearch + "&api_key=" + APIKey + "&page=\(page)"

if let url = NSURL(string: search)
{
let task = NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler:{data,response,error -> Void in
if let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as? NSDictionary
{
var name: String
var id: Int
var status: String
var overview = "meow"
if let results = json["results"] as? NSArray
{
for result in results
{
id = result["id"] as! Int
name = result["original_name"] as! String
//overview = result["overview"] as! String
status = ""
var newShow = Show(showId: id, showName: name, showDesc: overview, showStatus: status)
if let date = result["first_air_date"] as? String
{
newShow.firstAired = self.formatDate(date)
}
if let poster = result["poster_path"] as? String
{
if let baseUrl = AppDelegate.config?.baseUrl
{
if let data = NSData(contentsOfURL: NSURL(string: baseUrl + posterSize + poster)!)
{
//newShow.posterImage = UIImage(data: data)
}
}
}
searchResults.append(newShow)
}
}
if let pages = json["total_pages"] as? Int
{
totalPages = pages
}
}

})
}

}

return (results: searchResults, maxPages: totalPages)
}

如你所见,上面的类从指定的url获取并解析数据。我只是不确定完成此操作后如何更新 TableView 。在 searchBarSearchButtonClicked 中调用 self.tableView.reloadData() 无效。

最佳答案

将 reloadData() 调用放在 if 语句之后

if let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as? NSDictionary
{

.... more code

if let pages = json["total_pages"] as? Int
{
totalPages = pages
}
}
self.myTableView.reloadData()

关于ios - 在 Swift 中从异步数据更新 TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31415721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com