获取 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 对象中的单个值获取数据?
编写 SwiftUI 模型以从带有数组的 JSON 文件中读取