我有一个由URL任务设置的单元格的文本标签。但是当我第一次加载应用程序时,标签文本没有设置为任务结果,直到我滚动表格视图或我选择单元格本身。
我假设我的代码需要手动“更新”单元格的视图?这是我在tableView cellForRowAtIndexPath函数中使用的任务:
if indexPath.row == self.homeLabels.count - 1 {
let task1 = NSURLSession.sharedSession().dataTaskWithURL(url1!) { data, response, error in
if error != nil {
println(error)
return
}
let parser = NSXMLParser(data: data)
parser.delegate = self
if parser.parse() {
println(self.results)
if indexPath.row == 0 {
cell.detailTextLabel!.text = self.parseResults
}
}
}
我尝试过添加tableView.reloadData(),但这似乎不是正确的功能。
答案 0 :(得分:1)
实际上,这不是一个很好的方法。
首先,NSURLSession是一个异步网络,这意味着它们从主线程运行网络。
其次,你应该有一个数据模型,比如数组来保存self.parseResults中的这些字符串,并在viewDidLoad中处理这些请求。
最后,检查所有已完成的请求。如果完成,则重新加载tableview,将所有数据提供给UI。
答案 1 :(得分:0)
您应该在主队列上执行所有UI更新。
dispatch_async(dispatch_get_main_queue()) {
// Update UI
}