Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我能';t使用Swift JSON打印到TableView数据_Json_Swift_Xcode - Fatal编程技术网

我能';t使用Swift JSON打印到TableView数据

我能';t使用Swift JSON打印到TableView数据,json,swift,xcode,Json,Swift,Xcode,我对使用JSON还不熟悉,我想从一个简单的应用程序开始,提供电影的概述。下面的代码不会在tableView上打印任何内容,应用程序仍然为空,没有结果。他不犯错误。但是,在调试区域,数据会将它们打印给我。如何在tableView上获得结果 ViewController.swift import UIKit class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { var p

我对使用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)
    }
    
}

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

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

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

viewDidLoad
中重新加载表视图毫无意义。

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

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

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

viewDidLoad
中重新加载表视图毫无意义。

我简直不敢相信!这是唯一的问题,现在它工作了!非常感谢。我疯狂了好几天:-)我简直不敢相信!这是唯一的问题,现在它工作了!非常感谢。我疯狂了好几天:-)