gpt4 book ai didi

swift - 在 cellForRowAt 中显示正确的信息

转载 作者:行者123 更新时间:2023-11-28 15:10:40 26 4
gpt4 key购买 nike

我认为我很接近,但似乎让自己感到困惑,因为我可以访问所有数据,但无法使其正常运行。

我正在尝试在表格 View 的表格中显示其各自公司(部门)下的员工列表。

我的 CoreData 在存储值和关系方面是正确的。我通过在不同地方使用 print 语句知道这一点。

下面是我的代码,但是我对cellForRowAt 方法的问题的总结是...

  1. 我可以使用 print("Company -\(company.name!) Employee -\(employee.name!)") 打印公司及其员工的列表
    • 公司 - 公司 1 员工 - Fred Smith
    • 公司 - 公司 1 员工 - Betty Boo
    • 公司 - 公司 2 员工 - GI Joe
    • 公司 - 公司 3 员工 - George Jungle
  2. 如果我设置 cell.textLabel?.text = allCompanies[indexPath.section].name,我会在每个部分得到正确的行数(基于每个公司的 employee.count),但是它在每个部分的每一行上显示公司名称
  3. 如果我设置 cell.textLabel?.text = employee.name!,我只会在所有行中返回一名员工。所有部门的同一名员工。

CoreData 实体

实体 - 公司
属性 - 名称
关系 - hasEmployee

实体 - 员工
属性 - 名称
关系 - hasCompany

var allCompanies: [Company] = []

func getCompanies() {
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Company")
request.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]
request.returnsObjectsAsFaults = false

do {
allCompanies = try moc.fetch(request) as! [Company]
} catch let err {
print(err)
}
}

//MARK: - Fetched Results
lazy var fetchedResultsController: NSFetchedResultsController = { () -> NSFetchedResultsController<Employee> in

let fetchRequest: NSFetchRequest<Employee> = Employee.fetchRequest()
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]

let frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: moc, sectionNameKeyPath: nil, cacheName: nil)
frc.delegate = self
return frc
}()

func attemptFetch() {

do {
try fetchedResultsController.performFetch()
} catch let err {
print(err)
}
}

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

let cell = tableView.dequeueReusableCell(withIdentifier: cellID, for: indexPath) as! EmployeeCell

for company in allCompanies {
for employee in company.hasEmployee?.allObjects as! [Employee] {

// print("Company - \(company.name!) Employee - \(employee.name!)")
// cell.textLabel?.text = employee.name!
cell.textLabel?.text = allCompanies[indexPath.section].name
}
}
return cell
}

如有任何帮助,我们将不胜感激。谢谢

最佳答案

如果你想使用 Company 实例作为部分,而员工作为你可以写的行

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

let cell = tableView.dequeueReusableCell(withIdentifier: cellID, for: indexPath) as! EmployeeCell

let company = allCompanies[indexPath.section]
let allEmployees = company.hasEmployee?.allObjects as! [Employee]
let employee = allEmployees[indexPath.row]
cell.textLabel?.text = employee.name
return cell
}

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
let company = allCompanies[section]
return company.name
}

但我建议使用 NSFetchedResultsController 的功能来处理这些部分。

PS:数组的命名 hasEmployees 令人困惑,因为通常前缀 hasis 表示 Bool。只需将其命名为 employees 并将数组(实际上是一个集合)声明为非可选的。

关于swift - 在 cellForRowAt 中显示正确的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47705070/

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