gpt4 book ai didi

json - Swift Tableview 数据加载使索引超出范围

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

在我的场景中,我正在尝试将 JSON 数据加载到 Tableview 中。在这里,我正在维护 Tableview 自定义 cell。每当尝试将数据上传到 tableview 时,我可能有机会从 server 添加新数据。在这里,加载时出现 Index 超出范围错误。每次我从 viewWillAppear 调用 JSON 函数时。我有足够的 data,在我的数组中没有不均匀的数据。下面的代码我正在使用

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated) // No need for semicolon

self.tableArray.removeAll()
self.cartname.removeAll()
self.parentid.removeAll()
self.name.removeAll()
self.year.removeAll()

parseJSON()
}

这是我的 JSON 流程

if let content = json["content"] as? [[String:String]] {
print(json)
for category in content {
let cat_id = category["cat_id"]
let cat_name = category["cat_name"]
let cat_parentid = category["cat_parentid"]
let name = category["name"]
let year = category["year"]


self.tableArray.append(cat_id ?? "unknnown")
self.cartname.append(cat_name ?? "unknnown")
self.parentid.append(cat_parentid ?? "unknnown")
self.name.append(name ?? "unknnown")
self.year.append(year ?? "unknnown")
}

Tableview 单元格数据加载

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! MyCustomCell

cell.cat_id.text = self.tableArray[indexPath.row]
cell.cat_name.text = self.cartname[indexPath.row]// Some time Here I am getting out of range error
cell.cat_parentid.text = self.parentid[indexPath.row]
cell.name.text = self.name[indexPath.row] // Here I am getting out of range error
cell.year.text = self.year[indexPath.row]

return cell
}
}

最佳答案

使用 tableView 时需要多个数组,首先从OOP 点你需要创建 1 个模型

struct Root: Codable {
let catID, catName, catParentid, year,name: String?

enum CodingKeys: String, CodingKey {
case catID = "cat_id"
case catName = "cat_name"
case catParentid = "cat_parentid"
case year, name
}
}

并使用Codable解析json

var arr = [Root]()

do {
let content = json["content"] as! [[String:String]]
let staData = try JSONSerialization.data(withJSONObject:content,options:[])
arr = try JSONDecoder().decode([Root].self, from:staData)
}
catch {
print(error)
}

在 numberOfRows 中

return arr.count

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! MyCustomCell
let item = arr[indexPAth.row]
cell.cat_id.text = item.catID
cell.cat_name.text = item.catName
cell.cat_parentid.text = item.catParentid
cell.name.text = item.name
cell.year.text = item.year
return cell
}

关于json - Swift Tableview 数据加载使索引超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54716870/

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