NSFetchedResultsController部分按关系分组

时间:2015-06-18 14:25:23

标签: ios swift core-data

所以我有一个Core Data实体,我试图使用NSFetchedResultsController在表视图中显示。相关的模型属性如下所示:

发表

  • parentPost(OtM关系)
  • childPosts(与parentPost相反)
  • rootParent(OtM关系,指向树的顶部)
  • allChildren(rootParent的反转,显示根对象的扁平子项)

关系形成一棵树,其中根Post是parentPost = nil的树。我想要显示的方式是每个根帖子是一个部分中的第一个项目,然后其余的行是根目录的子项的展平列表。

这很容易通过执行这样的获取请求来手动排列:

        let fetchRequest = NSFetchRequest(entityName: Post.entityName())
        fetchRequest.predicate = NSPredicate(format: "parentPost = NULL")
        fetchRequest.sortDescriptors = sortOrder.sortDescriptors
        fetchRequest.fetchBatchSize = 20
        fetchRequest.relationshipKeyPathsForPrefetching = ["allChildren"]

然后我可以从每个结果中构建section数组,如下所示:

    let sectionPost = self.fetchedResultsController!.fetchedObjects![section] as! Post
    var sectionArray = NSMutableArray(object: sectionPost)
    var filteredSet = sectionPost.allChildren.filteredOrderedSetUsingPredicate(NSPredicate(format: "approved != FALSE AND postDeleted != TRUE AND spam != TRUE"))
    sectionArray.addObjectsFromArray(filteredSet.array)

问题是:在FRC内有没有办法做到这一点?从FRC维护一个单独的数据源是很复杂的,我宁愿找到一种方法来处理单个提取请求,但我没有看到一个很好的方法来处理它。

1 个答案:

答案 0 :(得分:1)

不能对实体上的密钥进行分组。所以使用瞬态属性或获取属性来获取关系并使其成为关键

在你的情况下..例如使所有POST对象都有一个键" postToGroupBy'或者" postNameToGroupBy或者其他什么,以便帖子及其所有孩子都在同一个组中