核心数据:按实体属性对实体进行分组

Posted

技术标签:

【中文标题】核心数据:按实体属性对实体进行分组【英文标题】:Core Data: Grouping Entities by Entitiy Attribute 【发布时间】:2016-04-04 09:23:56 【问题描述】:

我有一个简单的实体,其属性如下:

x       : String
y       : String
category: String
z       : Int

没有多余的。 我想获取我的数据并按类别分组。例如:

我想收到一本字典,它看起来像这样:

["Category #1": [Entity], "Category #2": [Entity], etc.]

所以,基本上我想按类别对我的实体进行分组并将其提供给我。 NSFetchedResultsController 可以为我做这件事,但在这种情况下我不想让我们这样做。它是init方法:

init(fetchRequest: NSFetchRequest, managedObjectContext context: NSManagedObjectContext, sectionNameKeyPath: String?, cacheName name: String?) 

拥有我正在寻找的 sectionNameKeyPath 属性。

我正在尝试使用 NSFetchRequest propertiesToGroupBy 属性来实现这一点,但它给我的选择非常有限,或者我做错了什么,这是我的尝试:

let sourcesFetchRequest = NSFetchRequest(entityName: "MyEntity")
sourcesFetchRequest.predicate = NSPredicate(format: "my valid predicate", false)

sourcesFetchRequest.propertiesToGroupBy = ["category","title"]
sourcesFetchRequest.resultType = .DictionaryResultType
sourcesFetchRequest.sortDescriptors = [NSSortDescriptor(key: "category", ascending: true), NSSortDescriptor(key: "title", ascending: true)]
sourcesFetchRequest.propertiesToFetch = ["category","title"]

结果如下:

["Category #1":"Title1", "Category #2": "Title2"]

这不是我想要的。

我也尝试使用NSExpression,但我肯定做错了什么。介绍我的好文章:http://www.cimgf.com/2015/06/25/core-data-and-aggregate-fetches-in-swift/

我希望有人可以帮助我完成这个“看起来微不足道”的任务。谢谢。

【问题讨论】:

【参考方案1】:

看起来您需要按类别字符串包含的某个索引进行排序。您应该将其分隔在一个新属性中。然后按这个索引排序。或者创建新的实体类别,它将包含标题和索引并与关系连接。并再次按此关系排序。

【讨论】:

感谢您的回答,我自己已经考虑过了,但是NSFetchedResultsController 可以做我需要的事情,您认为没有它我们不能做同样的事情吗? 是的,我这样做了,但我不会在这种情况下不使用它。 尝试仅对类别进行排序并获得排序后的实体数组。 在这种情况下,for in 循环,您如何看待将数组拆分为多个部分?

以上是关于核心数据:按实体属性对实体进行分组的主要内容,如果未能解决你的问题,请参考以下文章

按两个依赖属性对核心数据实体进行排序

根据核心数据中的属性对实体中的行进行排序

按日期和国家对表格视图部分进行分组

分组核心数据对象

对核心数据中的相关实体进行排序

核心数据:根据实体类型对抽象实体的结果进行排序