【问题标题】:I can't print to TableView data with Swift JSON我无法使用 Swift JSON 打印到 TableView 数据
【发布时间】:2021-02-18 09:22:52
【问题描述】:

我是使用 JSON 的新手,想从一个简单的应用开始,以提供电影的概览。以下代码不会在 tableView 上打印任何内容,应用程序保持为空,没有结果。他不会犯错。但是,在调试区域中,数据会将它们打印给我。如何在 tableView 上获取结果?

ViewController.swift

import UIKit


class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    var popularMoviesArray = [Results]()
    var swiftManager = SwiftManager()
    var tableViewCell = TableViewCell()

    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var labelError: UILabel!
    
    
   override func viewDidLoad() {
        super.viewDidLoad()

        tableView.delegate = self
        tableView.dataSource = self

        swiftManager.delegate = self
    
    swiftManager.fetchUrl()

        self.tableView.reloadData()
        
    }
    
    
   func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell

        let item = popularMoviesArray[indexPath.row]
        
        cell.labelTitle.text = item.title
        cell.labelYear.text = item.release_date
        cell.labelRate.text = String(item.vote_average ?? 0.0)
        cell.labelOreview.text = item.overview
        
        return cell
        
    }
    
    
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        performSegue(withIdentifier: "goToDetail", sender: indexPath.row)
    }
    
 
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        guard segue.identifier != nil else {
            return
        }
        
       let letRow = sender as? Int
        
        switch segue.identifier {
        case "goToDetail":
        (segue.destination as! ViewControllerDetail).itemDetail = popularMoviesArray[letRow!]
        
        default:
            return
        }
        
    }



}



extension ViewController: SwiftManagerDelegate {
    
func didUpdateStruct(_ swiftManager: SwiftManager, swiftData: SwiftData) {

        DispatchQueue.main.async {
            self.popularMoviesArray = swiftData.results
            print("PRINT ARRAY - \(self.popularMoviesArray)")
        }
        
    }
    

    func didFailWithError(error: Error) {
        print(error)
    }
    
}

【问题讨论】:

    标签: json swift xcode


    【解决方案1】:

    您必须在委托方法中重新加载表格视图,因为数据是异步加载的

    func didUpdateStruct(_ swiftManager: SwiftManager, swiftData: SwiftData) {
    
        DispatchQueue.main.async {
            self.popularMoviesArray = swiftData.results
            self.tableView.reloadData()
            print("PRINT ARRAY - \(self.popularMoviesArray)")
        }
        
    }
    

    viewDidLoad 中重新加载表格视图是没有意义的。

    【讨论】:

    • 我不敢相信!那是唯一的问题,现在可以了!谢谢!我疯了好几天:-)
    猜你喜欢
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多