我是IOS应用程序开发的初学者,我想将JSON文件的所有键的值添加到tableView中。
我尝试了下面的代码,但tableView仍然为空。
import UIKit
class ViewController: UIViewController,UITableViewDelegate, UITableViewDataSource {
var arraylist = [String]()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let session = URLSession.shared
let url = URL(string: "http://country.io/names.json")!
let task = session.dataTask(with: url) { data, response, error in
do {
if let json = try JSONSerialization.jsonObject(with: data!, options: []) as? [String: String] {
for (key, value) in json {
let someString = value
self.arraylist.append(someString)
}
}
} catch {
print("JSON error: \(error.localizedDescription)")
}
}
task.resume()
}
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return(arraylist.count)
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell")
cell.textLabel?.text = arraylist[indexPath.row]
return cell
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
答案 0 :(得分:1)
首先检查是否
datasource
和delegate
已连接到Interface Builder中的视图控制器。cell
。为表视图添加IBOutlet
并将其连接到Interface Builder
@IBOutlet weak var tableView : UITableView!
为数据源数组赋予一个更有意义且不太委婉的名称
var countries = [String]()
填充数据源数组后,在主线程上重新加载表视图
if let json = try JSONSerialization.jsonObject(with: data!) as? [String: String] {
// easier way to get the country names
self.countries = json.values.sorted()
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
总是dequeue
个单元格
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = countries[indexPath.row]
return cell
}
return
不是一个函数(没有括号)
return countries.count
答案 1 :(得分:0)
获取新数据后,用新数据重新加载tableView。 也。如果还没有,请让您的视图控制器/视图成为tableView的委托。
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.tableView.delegate = self
self.tableView.dataSource = self
let session = URLSession.shared
let url = URL(string: "http://country.io/names.json")!
let task = session.dataTask(with: url) { data, response, error in
do {
if let json = try JSONSerialization.jsonObject(with: data!, options: []) as? [String: String] {
for (key, value) in json {
let someString = value
self.arraylist.append(someString)
}
self.tableView.reloadData()
}
} catch {
print("JSON error: \(error.localizedDescription)")
}
}
task.resume()
}
答案 2 :(得分:0)
只需在代码块的末尾添加self.tableView.reloadData()即可,
do {
if let json = try JSONSerialization.jsonObject(with: data!, options: []) as? [String: String] {
for (key, value) in json {
let someString = value
self.arraylist.append(someString)
self.tableView.reloadData()
}
}
} catch {
print("JSON error: \(error.localizedDescription)")
}