Json数据未显示在tableView swift 5上
Posted
技术标签:
【中文标题】Json数据未显示在tableView swift 5上【英文标题】:Json data not showing on tableView swift 5 【发布时间】: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()
。它没有效果。
【参考方案1】:
如果您从服务器获得正确的响应(检查一次),那么接下来您需要在从服务器获得响应并填充数组后重新加载 tableView。
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)
// Reload table view here
DispatchQueue.main.async
self.tableView.reloadData()
catch
print(error)
task.resume()
或者,您可以添加在 fetchData 方法中处理的完成。
【讨论】:
我试过这样做它显示 UITableview.reloadData() 必须仅从主线程使用 @Motivationgym5 在 fetchData() 中添加 completionHandler 会很好。有了这个,您可以将 UI 事物与网络调用分开。编码愉快。以上是关于Json数据未显示在tableView swift 5上的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift TableView 中显示 JSON 数据的问题
TableView Parse Swift 数据未显示在应用程序中
Swift:将数据从 tableView 显示到另一个 ViewController(JSON、Alamorife、AlamofireImage)