如何从核心数据中从父实体获取所有子项,以及如何将父数据用作UITableview

时间:2019-05-16 07:07:18

标签: ios swift uitableview

我将父级设置为节,将子级设置为节中的行数,但是在从每个父级获取子级时,只有一个子级的父级显示多个子级,我的代码是从核心数据中获取数据< / p>

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,因此这可能是一个好的解决方案。

1 个答案:

答案 0 :(得分:0)

您不需要获取Folders实体,因为您已经定义了Project与Folders之间的一对多关系,该关系由Core Data处理

lst.index(min(i for i in lst if i > 0))

在其他代码中

strip_namespaces <- function(x){
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

        <!-- keep comments -->
        <xsl:template match="comment()">
          <xsl:copy>
            <xsl:apply-templates/>
          </xsl:copy>
        </xsl:template>

      <xsl:template match="*">
        <!-- remove element prefix -->
        <xsl:element name="{local-name()}">
          <!-- process attributes -->
          <xsl:for-each select="@*">
            <!-- remove attribute prefix -->
            <xsl:attribute name="{local-name()}">
              <xsl:value-of select="."/>
            </xsl:attribute>
          </xsl:for-each>
          <xsl:apply-templates/>
        </xsl:element>
      </xsl:template>
    </xsl:stylesheet>
                      ')
  xslt::xml_xslt(x, stylesh)
}

以上代码已直接在网络浏览器中更改,并且尚未编译,因此可能并不完整准确,但希望足以帮助您解决此问题