gpt4 book ai didi

ios - Swift 4.2 中带有 JSON 数据的 TableView

转载 作者:行者123 更新时间:2023-11-28 11:36:34 25 4
gpt4 key购买 nike

我是 Swift 的新手,我无能为力,所以请善待我。

我正在构建一个应用程序,它通过发布特定 ID 并取回 JSON 数组从 url 下载数据。 JSON 看起来像这样:

[{"group":"500","from":"2019-01-01","to":"2019-01-05"},{...}]

它的组号为“group”,开始日期为“from”,结束日期为“to”。

我想让不同的组显示在 Tableview 中,同时包含 FromTo 日期。我成功地正确下载了数据,但未能在表格 View 中显示它们。

我的代码在下面。也许你们中有人可以找出我做错了什么。

当我运行该项目时,我得到一个空表。

    import UIKit

typealias Fahrten = [FahrtenElement]

struct FahrtenElement: Codable {
let group: String?
let from: String?
let to: String?

enum CodingKeys: String, CodingKey {
case group = "group"
case from = "from"
case to = "to"
}
}

class BookingsController: UITableViewController {

var tableview: UITableView!
var groups = [Fahrten]()


// MARK: - Table view data source

override func viewDidLoad() {
super.viewDidLoad()
downloadData()
}

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let label = UILabel()
label.text = "Groups"
label.backgroundColor = .yellow

return label
}


// Section
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}

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

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
//lblname to set the title from response
cell.textLabel?.text = "Group \(String(describing: groups[indexPath.row].group))"
cell.detailTextLabel?.text = "From \(String(describing: groups[indexPath.row].from)) to \(String(describing: groups[indexPath.row].to))"
return cell
}

func downloadData() {
let id = "..."

let url = URL(string: "...")!

// request url
var request = URLRequest(url: url)

// method to pass data POST - cause it is secured
request.httpMethod = "POST"

// body gonna be appended to url
let body = "id=(\(id))"

// append body to our request that gonna be sent
request.httpBody = body.data(using: .utf8)

URLSession.shared.dataTask(with: request) { (data, response, err) in



guard let data = data else { return }


do {

let groups = try JSONDecoder().decode(Fahrten.self, from: data)

print(groups)
self.tableview.reloadData() // I get an crash here: Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value }
} catch let jsonErr {
print("Error serializing json:", jsonErr)
}

}.resume()
}

最佳答案

据我所知,您似乎正在清空数组而不是重新加载数据。

您应该将生成的组属性分配给 self.groups,然后重新加载数据。

DispatchQueue.main.async {
self.groups = groups // change here
self.tableview.reloadData()
}

关于ios - Swift 4.2 中带有 JSON 数据的 TableView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55100971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com