使用 JSON 数据填充表

Posted

技术标签:

【中文标题】使用 JSON 数据填充表【英文标题】:Populate table using JSON data 【发布时间】:2018-03-04 20:54:20 【问题描述】:

我正在尝试使用本地页面中的 JSON 填充表格。 到目前为止,它从 JSON 中获取所有数据,但仍然没有将任何文本放入单元格中。

我检查了我的单元格的标识符,它与 withIdentifier 匹配或使用了变量 nom 或 fec 并且也不起作用。

任何帮助都会很有用(使用 Alamofire 除外)。

import UIKit

class ListarViewController: UIViewController, UITableViewDelegate, UITableViewDataSource 
    var nom: String?
    var fec: String?
    var datas = [Actividad]()

    struct Actividad : Codable 
        let actividad: String?
        let fecha: String?
    

    @IBOutlet weak var pruebalbl: UILabel!
    var correo: String?

    override func viewDidLoad() 
        super.viewDidLoad()

        pruebalbl.text = correo
        //print(correo)
        let request = NSMutableURLRequest(url: NSURL(string: "http://localhost:8080/swiftdb/listarAct.php")! as URL)

        request.httpMethod = "POST"
        let postString = "correo=\(pruebalbl.text!)"
        request.httpBody = postString.data(using: String.Encoding.utf8)

        let task = URLSession.shared.dataTask(with: request as URLRequest) 
            data, response, error in

            guard let data = data, error == nil elsereturn

            do 
                let articlesData = try JSONDecoder().decode([Actividad].self, from: data)

                DispatchQueue.main.async
                    self.datas = articlesData

                    let aarti = self.datas
                    print(self.datas)

                    for item in aarti 
                        self.nom = item.actividad
                        self.fec = item.fecha
                        print("Nombres  \(self.nom)")
                        print("Fecha  \(self.fec)")
                    
                
             catch let error as NSError 
                print(error)
            

            print("response = \(response)")

            let responseString = NSString(data: data, encoding: String.Encoding.utf8.rawValue)
            print("responseString = \(responseString)")
        
        task.resume()
    

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return datas.count
    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
        cell?.textLabel?.text = datas[indexPath.row].actividad
        return cell!
    

我什至将自定义文本添加到 cell?.textLabel?.text 并且不起作用。

【问题讨论】:

为什么标记为 PHP? @max 更新...完成了吗? 收到数据后需要在table view上调用reloadData()。为什么是NSString,为什么是NSMutableURLRequest,为什么是Swift 3 中的NSURL 还是不行 考虑接收数据后在完成块中,而不是在resume行之后。 【参考方案1】:

感谢@vadian

我得到了答案:

我只需要在我的 DispatchQueue.main.async 之间添加 reloadData()

【讨论】:

【参考方案2】:

也许您必须在调用异步函数之前验证 url 请求的状态。

let response = response as? HTTPURLResponse
if(response?.statusCode == 200) 
  //Call your DispatchQueue

我希望这对你有用。

您好!

【讨论】:

以上是关于使用 JSON 数据填充表的主要内容,如果未能解决你的问题,请参考以下文章

使用来自 Spring 后端的 JSON 数据使用 Ajax XMLHttpRequest() 填充表

如何根据数据表角度中的 JSON 动态填充表值?

使用 JQuery 和 JSON 填充引导表

用 json 数据 swift 4 填充表视图

使用 jQuery 从 JSON 填充表

在 Swift 中使用远程 JSON 数据填充 tableView