简化:
名为卡的表中有3列.
名为卡的表中有3列.
id packTitle术语
id是一列 – 整数从0 ….. 100
packTitle – 字符串描述包,让我们说有3种包PACK1,PACK2,PACK3
通过sql语句
select packTitle from cards group by packTitle;
我可以得到3个项目的列表.
解决方法
CoreData是一个对象图形管理框架,而不是一个sql数据存储.因此,您应该尽可能快地让自己脱离sql心态. nspredicate旨在作为对象图中限定对象的a-no惊喜谓词.因此,您可以获取与查询匹配的所有对象,但这与将这些结果分组不同.如果要进行聚合操作,请使用Key-Value编码的
collection operators.在引擎盖下,Core Data可将其转换为明智的sql,但这仅仅是一个实现细节.
在这种情况下,您可以获得一组唯一的packTitle值
[myCards valueForKeyPath:@"@distinctUnionOfObjects.packTitle"];
这将给你在myCards集合中的独特的packTitle值集合.如果要将其用于核心数据存储中的所有卡,则必须运行所有卡的查询,然后应用此收集操作.
另一种方法是制作一个Packinformation实体,或者一些包含title属性的实体.然后,您可以在数据存储中只有3个这些实体,从相应的包实体引用它们.获取所有三个(或任何最终的数字)并获得他们的标题是微不足道的.
正如其他人所说,如果你想要做的是从一个关系数据集进行基本的报告,你可能会更好的直接使用sqlite.这一切都取决于从Core Data获得的其他好处.
原文地址:https://www.jb51.cc/c/110827.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。