gpt4 book ai didi

ios - 在 TableView 中显示 plist 中的数据数组

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

我正在努力在多个“向下钻取” TableView 中显示 plist 中的数据。显示的数据只是只读的,我不希望它一定基于 Web 数据,并且最多只有大约 100 个数据点,所以我对 plist 而不是 JSON 相当满意。

无论如何,问题...我有一组字典项目,我设法很好地显示它们。我从 GitHub 开始,涉及以下有关堆栈溢出的问题(我对其进行了一些修改,但这并不重要)。

Load data from a plist to two TableViews

https://github.com/DonMag/SWPListData

我需要帮助的是在每个人下显示一系列项目(本例中为“ friend ”)。下面的代码有望解释。

我在模型中创建了一个空数组

struct EmployeeDetails {
let functionary: String
let imageFace: String
let phone: String

//This is the new array I've added and am having trouble displaying
let friends: [String]


init(dictionary: [String: Any]) {
self.functionary = (dictionary["Functionary"] as? String) ?? ""
self.imageFace = (dictionary["ImageFace"] as? String) ?? ""
self.phone = (dictionary["Phone"] as? String) ?? ""

//I've initialised it here.
self.friends = (dictionary["Friends"] as? [String]) ?? [""]

现在在 viewController 中显示数据。我在显示“functionary”、“imageFace”和“phone”的正确数据时完全没有任何问题 - 但我似乎无法在其自己的部分中将“friends”显示为数组。我很确定主要问题在于 numberOfRowscellForRow:

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section == 0 {
if let theEmployee = newPage {
return theEmployee.details.count
}
return 0

}
else if section == 1 {
return 1
}
else if section == 2 {
if let theEmployee = newPage {
return theEmployee.details.count
}
return 0
}
else {
return 0
}
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) // as! TableViewCell2

if indexPath.section == 0 {

cell.textLabel?.text = "A"

if let theEmployee = newPage {
cell.textLabel?.text = theEmployee.details[indexPath.row].functionary
cell.detailTextLabel?.text = theEmployee.details[indexPath.row].phone + " (" + theEmployee.details[indexPath.row].imageFace + ")"
}
}

else if indexPath.section == 1 {
cell.textLabel?.text = "Test"

}

else if indexPath.section == 2 {
cell.textLabel?.text = ????

}

return cell
}

我认为在 numberOfRows 中编写以下内容会起作用:

else if section == 2 {
if let theEmployee = newPage {
return theEmployee.details.friends.count
}
return 0
}

但我收到错误:

value of type '[EmployeeDetails]' has no member 'friends'.

我需要做什么才能获得该数组?

注意:数组不为空。

任何建议/帮助将不胜感激!

最佳答案

问题是您正在访问详细信息上的 Friends 属性,而它是存储在详细信息中的结构上的属性,因此您必须通过类似这样的索引来访问它

theEmployee.details[yourIndex].friends.count

更新:

//首先你需要在.plist文件中进行更改,请像详细信息一样在其中添加Friends数组

现在这将要求您更改您的 Employee 结构代码

struct Employee {
let position: String
let name: String
let details: [EmployeeDetails]
let friends: [String]

init(dictionary: [String: Any]) {
self.position = (dictionary["Position"] as? String) ?? ""
self.name = (dictionary["Name"] as? String) ?? ""

let t = (dictionary["Details"] as? [Any]) ?? []
self.details = t.map({EmployeeDetails(dictionary: $0 as! [String : Any])})
self.friends = (dictionary["Friends"] as? [String]) ?? []

}
}

下一步是将其添加到表格 View 中,如下所示

override func numberOfSections(in tableView: UITableView) -> Int {
return 2
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

if let theEmployee = newPage {
if section == 0 {
return theEmployee.details.count
}else if section == 1 {
return theEmployee.friends.count
}

}
return 0

}
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

if section == 0 {
return "Subordinates"
}else if section == 1 {
return "Friends"
}

return ""
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) // as! TableViewCell2

cell.textLabel?.text = "A"

if let theEmployee = newPage {
if indexPath.section == 0 {
cell.textLabel?.text = theEmployee.details[indexPath.row].functionary
cell.detailTextLabel?.text = theEmployee.details[indexPath.row].phone + " (" + theEmployee.details[indexPath.row].imageFace + ")"
}else if indexPath.section == 1 {
cell.textLabel?.text = theEmployee.friends[indexPath.row]
}
}



return cell
}

}

关于ios - 在 TableView 中显示 plist 中的数据数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45473869/

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