加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – NSPredicate相当于SQL的GROUP BY的东西

发布时间:2020-12-16 03:39:21 所属栏目:百科 来源:网络整理
导读:简化: 名为卡的表中有3列. id packTitle术语 id是一列 – 整数从0 ….. 100 packTitle – 字符串描述包,让我们说有3种包PACK1,PACK2,PACK3 长期 – 不同的未分类的101个项目的名称. 通过SQL语句 select packTitle from cards group by packTitle; 我可以得
简化:
名为卡的表中有3列.

id packTitle术语

id是一列 – 整数从0 ….. 100

packTitle – 字符串描述包,让我们说有3种包PACK1,PACK2,PACK3

长期 – 不同的未分类的101个项目的名称.

通过SQL语句

select packTitle from cards group by packTitle;

我可以得到3个项目的列表.

你能建议NSPredicate相当于SQL语句GROUP BY.我需要一个数组来填充UITableView.

解决方法

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获得的其他好处.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读