我认为我已经接近了,但似乎让我自己感到困惑,因为我可以访问所有数据,但无法让它表现出来。
我正在尝试在表格视图的表格中显示各自公司(部分)下的员工列表。
关于存储的值和关系,我的CoreData是正确的。我通过在各个地方使用print语句来了解这一点。
以下是我的代码,但有关cellForRowAt
方法的问题摘要是......
print("Company - \(company.name!) Employee - \(employee.name!)")
打印公司及其员工的列表
cell.textLabel?.text = allCompanies[indexPath.section].name
,我会在每个部分中获得正确的行数(基于每个公司的employee.count),但每个部分显示每行的公司名称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
}
非常感谢任何帮助。感谢
答案 0 :(得分:1)
如果您想将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
但我建议使用hasEmployees
的功能来处理各个部分。
PS:数组的命名has
令人困惑,因为通常前缀is
或Bool
表示employees
。只需将其命名为new Date('1990-03-31T23:00:00-06:00')
并将数组(实际上是一组)声明为非可选项。