从 json 填充单元格时表为空
Posted
技术标签:
【中文标题】从 json 填充单元格时表为空【英文标题】:Table empty when populating cells from json 【发布时间】:2018-08-08 22:01:47 【问题描述】:我正在尝试使用 json 内容填充表格。除了表格没有显示任何数据外,一切似乎都运行良好。实际上,下面显示的代码应该将每个 json 数据数组的“标题”信息显示在一个单元格中。见行
cell.textLabel?.text = myNewsItems[indexPath.row].title
但是,根据我在控制台输出中看到的内容,我可以验证新闻数组的解析是否符合预期(请参阅检查点:print(myNewsS)
)。
知道我错过了什么吗?
Swift4
import UIKit
// structure from json file
struct News: Codable
let type: String
let timestamp: String
let title: String
let message: String
class HomeVC: UIViewController, UITableViewDelegate, UITableViewDataSource
var myTableView = UITableView()
var myNewsItems: [News] = []
override func viewDidLoad()
super.viewDidLoad()
let barHeight: CGFloat = UIApplication.shared.statusBarFrame.size.height
let displayWidth: CGFloat = self.view.frame.width
let displayHeight: CGFloat = self.view.frame.height
myTableView = UITableView(frame: CGRect(x: 0, y: 150, width: displayWidth, height: displayHeight - barHeight))
myTableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
myTableView.dataSource = self
myTableView.delegate = self
self.view.addSubview(myTableView)
// JSON
let url=URL(string:"https://api.myjson.com/bins/ywv0k")
let session = URLSession.shared
let task = session.dataTask(with: url!) (data, response, error) in
// check status 200 OK etc.
guard let data = data else return
do
let myNewsS = try
JSONDecoder().decode([News].self, from: data)
print(myNewsS)
DispatchQueue.main.async
self.myTableView.reloadData()
catch let jsonErr
print("Error json:", jsonErr)
task.resume()
func numberOfSections(in tableView: UITableView) -> Int
return 1
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return myNewsItems.count
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = myNewsItems[indexPath.row].title
return cell
【问题讨论】:
解析完成后忘记设置myNewsItems
。
【参考方案1】:
分配数组
myNewsItems = myNewsS
DispatchQueue.main.async
self.myTableView.reloadData()
【讨论】:
以上是关于从 json 填充单元格时表为空的主要内容,如果未能解决你的问题,请参考以下文章
当必须使用同一列中的不同值填充单元格时,如何填写该列中的空白单元格?