Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSPredicate相当于SQL';s分组方式_Objective C_Ios_Core Data_Nspredicate - Fatal编程技术网

Objective c NSPredicate相当于SQL';s分组方式

Objective c NSPredicate相当于SQL';s分组方式,objective-c,ios,core-data,nspredicate,Objective C,Ios,Core Data,Nspredicate,要简化: 名为cards的表中有3列 id包标题术语 id是一列-0..100中的整数 packTitle-描述包的字符串,假设有3种包PACK1、PACK2、PACK3 术语-101项的不同未排序名称 按SQL语句 select packTitle from cards group by packTitle; 我可以得到3个项目的清单 您能否建议NSPredicate等效于SQL语句GROUP BY。我需要获取一个数组来填充UITableView。假设您使用的是CoreData。。。根据 您

要简化: 名为cards的表中有3列

id包标题术语

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语句,例如

SELECT t1.name, V1, V2
    FROM table1 t1 JOIN (SELECT t2.name AS V1, count(*) AS V2
        FROM table2 t2 GROUP BY t2.name as V) on t1.name = V.V1
进入提取请求。那么你必须取回你感兴趣的物品 直接使用结果执行计算,或使用 数组运算符


如果您需要执行这样复杂的查询,最好使用SQLite。

CoreData是一个对象图管理框架,而不是SQL数据存储。因此,您应该尽快摆脱SQL思维模式
NSPredicate
用作对象图中限定对象的无意外谓词。因此,您可以获取与查询匹配的所有对象,但这与对这些结果进行分组不同。如果要执行聚合操作,请使用键值编码。在幕后,核心数据可能会将这些转换为合理的SQL,但这只是一个实现细节

在这种情况下,您可以使用

[myCards valueForKeyPath:@"@distinctUnionOfObjects.packTitle"];
这将为您提供
myCards
集合中不同的
packTitle
值集。如果要对核心数据存储中的所有卡执行此操作,则必须对所有
卡运行查询,然后应用此收集操作

另一种方法是创建一个
PackInformation
实体,或一些包含
title
属性的实体。然后,数据存储中只能有3个实体,从相应的包实体引用它们。把这三个(或者不管最后的数字是多少)都拿出来,并得到他们的头衔,这是很简单的


正如其他人所说,如果您试图做的基本上是从关系数据集报告,那么最好使用直接的SQLite。这完全取决于您从核心数据中获得的其他好处。

谢谢您的回复。然后我必须处理结果。非常感谢您提供的详细信息,特别感谢您关注我的问题。看来我需要学习键值编码来理解你的答案。如何删除所有名为PACK1的packTile卡也很有趣。希望我能找到朝这个方向发展的答案。NSPredicate本身与核心数据无关。它可能与数组和其他数据库(如Realm)一起使用。这就是为什么这是一个有效的问题,并且与SQL进行比较非常好