所以我有一个Core Data实体,我试图使用NSFetchedResultsController在表视图中显示。相关的模型属性如下所示:
发表
关系形成一棵树,其中根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维护一个单独的数据源是很复杂的,我宁愿找到一种方法来处理单个提取请求,但我没有看到一个很好的方法来处理它。
答案 0 :(得分:1)
不能对实体上的密钥进行分组。所以使用瞬态属性或获取属性来获取关系并使其成为关键
在你的情况下..例如使所有POST对象都有一个键" postToGroupBy'或者" postNameToGroupBy或者其他什么,以便帖子及其所有孩子都在同一个组中