Mic*_*ael 10 core-data objective-c nspredicate ios
简化:名为cards的表中有3列.
id packTitle term
id是一列 - 从0到100的整数
packTitle - 描述包的字符串,假设有3种包PACK1,PACK2,PACK3
术语 - 101个项目的不同未分类名称.
通过SQL语句
select packTitle from cards group by packTitle;
Run Code Online (Sandbox Code Playgroud)
我可以获得3个项目的清单.
你能否建议NSPredicate相当于SQL语句GROUP BY.我需要在UITableView中填充一个数组.
Bar*_*ark 15
CoreData是一个对象图管理框架,而不是SQL数据存储.因此,您应该 - 尽可能快地 - 让自己摆脱SQL思维模式.NSPredicate对于对象图中的限定对象,它是一个没有意外的谓词.因此,您可以获取与查询匹配的所有对象,但这与对这些结果进行分组不同.如果要进行聚合操作,请使用键值编码的集合运算符.在引擎盖下,Core Data 可能会将这些转换为合理的SQL,但这只是一个实现细节.
在这种情况下,您可以获取一组唯一packTitle值
[myCards valueForKeyPath:@"@distinctUnionOfObjects.packTitle"];
Run Code Online (Sandbox Code Playgroud)
这将为您提供集合中不同的packTitle值myCards集.如果您希望核心数据存储中的所有卡都有此功能,则必须对所有卡运行查询cards,然后应用此收集操作.
另一种方法是创建一个PackInformation实体,或一些包含title属性的实体.然后,您可以在数据存储中只有3个这样的实体,从适当的包实体引用它们.获取所有三个(或任何最终数字)并获得他们的标题是微不足道的.
正如其他人所说的那样,如果你要做的是从关系数据集中进行基本报告,你可能最好选择直接的SQLite.这一切都取决于您从Core Data获得多少其他好处.
| 归档时间: |
|
| 查看次数: |
7475 次 |
| 最近记录: |