从 Internet 下载每个单元格的数据后,如何在 UItableviewCell 中重新加载数据?
How can I reload data in UItableviewCell after I download data for each cell from internet?
我有一个包含一些单元格的表格视图,每个单元格都将从 Internet 获取数据。
我的 tableviewcell 函数是这样的:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("placeCell", forIndexPath: indexPath) as! WeatherTableViewCell
......
//Create Url here...
......
let downloadTask: NSURLSessionDownloadTask = sharedSession.downloadTaskWithURL(url!, completionHandler: { (location: NSURL!, response: NSURLResponse!, error: NSError!) -> Void in
if error == nil {
let dataObject = NSData(contentsOfURL: location)
// println("dataObject:\(dataObject)")
.........
// Got data text here
.........
println("dataText: \(self.dataText)")
}
cell.label.text = "\(self.dataText)"
})
downloadTask.resume()
return cell
}
EveryThing 工作正常,我可以获得每个单元格的所有数据,但单元格的标签不会更新数据文本。
当我获得每个单元格的数据时,我希望单元格更新 dataText。我该怎么做?
您必须在主线程中更新您的 UI。
替换为:
cell.label.text = "\(self.dataText)"
有了这个:
dispatch_async(dispatch_get_main_queue()) {
cell.label.text = "\(self.dataText)"
}
请试试这个。
var indexPath = NSIndexPath(forRow: 0, inSection: 0)
self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.none)
您也可以使用以下代码实现您的要求
// on main thread
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// do your background code here
// schedule data download here
dispatch_sync(dispatch_get_main_queue(), ^{
// on main thread
// assign the text to label here
// also be sure to assign the text to label of current index path cell
});
});
[1]:
我有一个包含一些单元格的表格视图,每个单元格都将从 Internet 获取数据。 我的 tableviewcell 函数是这样的:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("placeCell", forIndexPath: indexPath) as! WeatherTableViewCell
......
//Create Url here...
......
let downloadTask: NSURLSessionDownloadTask = sharedSession.downloadTaskWithURL(url!, completionHandler: { (location: NSURL!, response: NSURLResponse!, error: NSError!) -> Void in
if error == nil {
let dataObject = NSData(contentsOfURL: location)
// println("dataObject:\(dataObject)")
.........
// Got data text here
.........
println("dataText: \(self.dataText)")
}
cell.label.text = "\(self.dataText)"
})
downloadTask.resume()
return cell
}
EveryThing 工作正常,我可以获得每个单元格的所有数据,但单元格的标签不会更新数据文本。 当我获得每个单元格的数据时,我希望单元格更新 dataText。我该怎么做?
您必须在主线程中更新您的 UI。
替换为:
cell.label.text = "\(self.dataText)"
有了这个:
dispatch_async(dispatch_get_main_queue()) {
cell.label.text = "\(self.dataText)"
}
请试试这个。
var indexPath = NSIndexPath(forRow: 0, inSection: 0)
self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.none)
您也可以使用以下代码实现您的要求
// on main thread
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// do your background code here
// schedule data download here
dispatch_sync(dispatch_get_main_queue(), ^{
// on main thread
// assign the text to label here
// also be sure to assign the text to label of current index path cell
});
});
[1]: