【发布时间】:2020-07-12 16:47:44
【问题描述】:
我获取了数据,它在打印时显示,但是当我尝试在 tableview 上显示它时。什么都没有发生
我是否将 tableview.reloadData 放在了错误的位置?
override func viewDidLoad() {
super.viewDidLoad()
fetchData()
tableView.reloadData()
}
func fetchData()
{
if let url = URL(string: urlConstant) {
let session = URLSession(configuration: .default)
let task = session.dataTask(with: url) { (data, res, err) in
if err == nil
{
let decoder = JSONDecoder()
if let safeData = data
{
do{
let results = try decoder.decode(Results.self, from: safeData)
guard let array = results.Result as? [Products] else {return }
for product in array
{
self.productArray.append(product)
}
} catch {
print(error)
}
}
}
}
task.resume()
}
self.tableView.reloadData()
}
【问题讨论】:
-
self.tableView.reloadData()很快就会被调用,然后再执行 for 循环self.productArray.append(product)。您缺少异步概念。要检查吗?在您的reloadData()之前添加一个打印,并在您的 for 循环中添加一个。检查之前打印的是哪一个。另外,检查 `self.productArray.append(product)` 是否被调用(解析顺利等) -
@Larme 我在第一次调用 relodData() 之前尝试了你所说的并打印。我应该在哪里使用异步概念?
-
在你的代码中放置一些断点来查看执行的顺序。
-
不相关但删除
viewDidLoad中的tableView.reloadData()。它没有效果。