核心数据到多个过滤

时间:2016-01-02 12:33:32

标签: ios core-data

我有两个实体:Cluster <-->> Photos

我需要选择所有带照片的群集,其中照片ID大于,即:

Cluster
1 Cluster1
2 Cluster2

Photos
1 Photo1 Cluster1
2 Photo2 Cluster2
3 Photo3 Cluster1
4 Photo4 Cluster2

即:获取包含照片的所有群集,其中photoId&gt; = 3.我希望有 Cluster1 - Photo3,Cluster2 - Photo4

目前,我正在尝试使用谓词ClusterANY photos.id > 393614542实体创建获取请求。它工作正常。

现在我正在尝试(NOT photos.id IN {393614542, 355088346}) AND photos.id >= 301213165 AND photos.id <= 393614542,但我没有运气。

导致错误:to-many key not allowed here

我可以使用CoreData执行此类查询吗?

1 个答案:

答案 0 :(得分:0)

您可以使用SUBQUERY为每个photo“同时”测试几个条件:

NSPredicate *predciate = [NSPredicate predicateWithFormat:@"SUBQUERY(photos, $p, (NOT $p.id IN {393614542, 355088346}) AND $p.id >= 301213165 AND $p.id <= 393614542).@count > 0"];

或在Swift中:

let predicate = NSPredicate(format:"SUBQUERY(photos, $p, (NOT $p.id IN {393614542, 355088346}) AND $p.id >= 301213165 AND $p.id <= 393614542).@count > 0")