从 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 填充单元格时表为空的主要内容,如果未能解决你的问题,请参考以下文章

当必须使用同一列中的不同值填充单元格时,如何填写该列中的空白单元格?

在 SWIFT 的表视图中填充自定义单元格时出错

滚动单元格时表格视图设置消失

生成新单元格时清除集合视图单元格(iOS7 - AFNetworking)

选择没有关联 JSON 响应的单元格时该怎么做

修复包含错误的单元格时,消息框一直显示