获取 JSON 数据以从数组中填充 TableView

Posted

技术标签:

【中文标题】获取 JSON 数据以从数组中填充 TableView【英文标题】:Getting JSON data to populate a TableView from an Array 【发布时间】:2016-05-26 18:37:54 【问题描述】:

我能够在循环内成功地使用我的 JSON 数据填充数组,并且我正在尝试使用相同的信息填充我的 TableView 的单元格,但目前列表中没有任何内容。

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 

    @IBOutlet weak var table: UITableView!

    var headlines = [String]()
    let baseURL = "http://api.nytimes.com/svc/topstories/v1/business.json?api-key=123456789"



    override func viewDidLoad() 
        getJSON()
        super.viewDidLoad()
        self.table.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
        self.table.dataSource = self
        self.table.delegate = self
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    


    func getJSON() 

        let url = NSURL(string: baseURL)
        let request = NSURLRequest(URL: url!)
        let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
        let task = session.dataTaskWithRequest(request) (data, response, error) -> Void in

            if error == nil 
                let SwiftyJSON = JSON(data: data!)
                let theTitle = SwiftyJSON["results"].arrayValue

                for title in theTitle

                    let titles = title["title"].stringValue
                    self.headlines.insert(titles, atIndex: 0)
                    //print("- " + titles)
                

                print(self.headlines)

            

            else 
                print("there was an error")
            
        

        task.resume()

    


    // From the UITAbleViewDataSource
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return headlines.count
    

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
        let cell = self.table.dequeueReusableCellWithIdentifier("cell")! as UITableViewCell
        cell.textLabel!.text = self.headlines[indexPath.row]
        return cell
    

    // From the UITableViewDelegate
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
        print("You tapped on cell # \(indexPath.row)")
    

【问题讨论】:

【参考方案1】:

任务是异步的,所以当您加载数组时,您必须重新加载表

func getJSON() 

    let url = NSURL(string: baseURL)
    let request = NSURLRequest(URL: url!)
    let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
    let task = session.dataTaskWithRequest(request) (data, response, error) -> Void in

        if error == nil 
            let SwiftyJSON = JSON(data: data!)
            let theTitle = SwiftyJSON["results"].arrayValue

            for title in theTitle

                let titles = title["title"].stringValue
                self.headlines.insert(titles, atIndex: 0)
                //print("- " + titles)
            

            print(self.headlines)
            self.table.reloadData()
        

        else 
            print("there was an error")
        
    

    task.resume()


【讨论】:

谢谢!我在一分钟前和朋友一起解决了这个问题,感谢您的帮助!

以上是关于获取 JSON 数据以从数组中填充 TableView的主要内容,如果未能解决你的问题,请参考以下文章

如何从 JSON 数组中的 JSON 对象中的单个值获取数据?

在 tableview 中填充数组字典的高效和干净的方法

如何改进我的代码以从文本表填充数组?

编写 SwiftUI 模型以从带有数组的 JSON 文件中读取

使用 Core Data 一对多关系从 JSON 数组填充 sqlite 数据库

使用 Alamofire 获取数组键值