【发布时间】:2019-05-16 07:07:18
【问题描述】:
我将父级设置为节,子级设置为节中的行数,但是在从每个父级获取子级时,只有一个子级的父级显示多个,我的代码是从核心数据中获取数据
var projectsArray: [Project] = []
var foldersArray: [Folders] = []
let fetchRequest = NSFetchRequest<Project>(entityName: "Project")
let sortDescriptor = NSSortDescriptor(key: "pname", ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor]
let fetchFolders = NSFetchRequest<Folders>(entityName: "Folders")
let sortDesc = NSSortDescriptor(key: "name", ascending: true)
fetchFolders.sortDescriptors = [sortDesc]
do {
let newProjectArray = try managedContext.fetch(fetchRequest)
projectsArray = newProjectArray
for newObj in projectsArray{
if let projectId = newObj.id{
fetchFolders.predicate = NSPredicate(format: "pid = %@",projectId)
}
do {
foldersArray = try managedContext.fetch(fetchFolders)
print("The folders are",foldersArray as Any)
}catch{}
}
}catch let error as NSError {
print("Could not fetch. \(error), \(error.userInfo)")
projectsArray = []
}
在我的控制器中,我正在阅读,
func numberOfSections(in tableView: UITableView) -> Int {
return (newProjectArray != nil) ? newProjectArray!.count : 0
}
func tableView(_ tableView: UITableView, numberOfRowsInSection
section: Int) -> Int {
if newProjectArray![section].isExpandable == true{
return (folders != nil) ? (folders!.count) : 0
}
else{
return 0
}
}
func tableView(_ tableView: UITableView, heightForHeaderInSection
section: Int) -> CGFloat {
return 40
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath:
IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier:
"FoldersCell") as! FoldersCell
if newProjectArray![indexPath.section].isExpandable == true{
let folder = folders![indexPath.row]
cell.projectNameLabel.text = folder.name
}
return cell
}
假设名为ABC 的项目包含一个folder,而项目XYZ 包含folder1,folder2,folder3,在显示单元格ABC 时它正在显示folder,folder1,folder2,folder3,而在显示单元格XYZ 时它正在显示folder,folder1,folder2,folder3,那么有什么好的解决方案。
【问题讨论】:
-
您是否在核心数据模型中的 Project 和 Folders 实体之间建立了关系?
-
是 Joakim,从项目到文件夹的一对可能关系
-
那么您不需要为文件夹单独执行提取,您可以直接在
let projectFolders = project.folders等代码中将它们作为属性访问。将folders替换为您在模型中命名的关系 -
我也尝试过使用它,遇到同样的问题代码是
for newObj in projectsArray{ let new = newObj.mutableSetValue(forKey: "folder") let myObj = new.allObjects as? [Folders] for i in myObj!{ if newObj.isExpandable{ if newProjectArray.contains(newObj) { foldersArray.append(i) } } } } -
要发表评论的代码太多,我会发布一个答案。
标签: ios swift uitableview