简化一下:
名为卡片的表中有 3 列。
id pack标题术语
id 是一列 - 0.....100 之间的整数
packTitle - 描述包的字符串,假设有 3 种包 PACK 1、PACK 2、PACK 3
term - 101 个项目的不同未排序名称。
通过SQL语句
select packTitle from cards group by packTitle;
我可以获得 3 项的清单。
您能否建议 NSPredicate 相当于 SQL 语句 GROUP BY。我需要获取一个数组来填充 UITableView 中。
CoreData 是一个对象图管理框架,而不是 SQL 数据存储。因此,您应该尽快摆脱 SQL 思维模式。NSPredicate
意在作为对象图中限定对象的谓词(毫不奇怪)。因此,您可以获取与查询匹配的所有对象,但这与对这些结果进行分组不同。如果要进行聚合操作,请使用Key-Value编码集合运营商。在幕后,核心数据may将它们转换为合理的 SQL,但这只是一个实现细节。
在这种情况下,您可以获得唯一的集合packTitle
价值观与
[myCards valueForKeyPath:@"@distinctUnionOfObjects.packTitle"];
这将为您提供一组独特的packTitle
中的值myCards
收藏。如果您希望核心数据存储中的所有卡都执行此操作,则必须对所有卡运行查询cards
,然后应用此集合操作。
另一种选择是制作一个PackInformation
实体,或一些包含title
财产。然后,您可以在数据存储中仅保留其中 3 个实体,并从相应的包实体中引用它们。获取所有三个(或无论最终数字是什么)并获得它们的标题是很简单的。
正如其他人所说,如果您想要做的基本上是从关系数据集进行报告,那么您最好直接使用 SQLite。这完全取决于您从 Core Data 获得多少其他好处。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)