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

时间:2016-04-04 09:23:56

标签: ios swift core-data aggregate fetch

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

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

没什么特别的。 我想获取我的数据并按类别对其进行分组。 e.g:

我想收到一本字典,如下所示:

["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 个答案:

答案 0 :(得分:0)

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