Core data NSPredicate on nested object/NSSet在NSFETCH请求期间过滤结果

Core data NSPredicate on nested object/NSSet在NSFETCH请求期间过滤结果,core-data,filter,nspredicate,nsfetchrequest,nested-set-model,Core Data,Filter,Nspredicate,Nsfetchrequest,Nested Set Model,我想要一个简单的谓词,它返回所有模式为0且组中注册模式为0的组 确切地说,我需要一个谓词来访问嵌套对象属性。 不知何故,一个谓词类似于: [NSPredicate predicateWithFormat:@"mode = 0 AND enrollments.Enrollment.mode = 0"] 上面的谓词是错误的,显然不起作用 编辑: 我也尝试了下面的谓词,但没有成功 [NSPredicate predicateWithFormat:@"mode = 0 AND ALL ( SUBQUE

我想要一个简单的谓词,它返回所有模式为0且组中注册模式为0的组

确切地说,我需要一个谓词来访问嵌套对象属性。 不知何故,一个谓词类似于:

[NSPredicate predicateWithFormat:@"mode = 0 AND enrollments.Enrollment.mode = 0"]
上面的谓词是错误的,显然不起作用

编辑:

我也尝试了下面的谓词,但没有成功

[NSPredicate predicateWithFormat:@"mode = 0 AND ALL ( SUBQUERY(enrollments,$varEnrollment,$varEnrollment.mode = 0))"]
我需要一个结果,该结果包含所有活动组(group.mode=0)和所有活动报名者(enrolles.mode=0) 但对我来说,这个谓词不起作用


根据你的问题和评论,我猜你想要什么

[NSPredicate predicateWithFormat:@"mode = 0 AND (ALL enrollments.mode = 0)"]
更新

似乎所有的聚合都不起作用。它抛出

'NSInvalidArgumentException', reason: 'Unsupported predicate (null)'
正如@yunas所注意到的。之前也注意到了这一点,例如

另一方面,任何骨料都可以正常工作。因此,作为一种解决方法,可以用等效的ANY表达式替换ALL:

[NSPredicate predicateWithFormat:@"mode = 0 AND NOT(ANY enrollments.mode != 0)"];
这确实有效(我已经测试过了)

更新2

在讨论过程中,很明显,yunas希望在模式为0的情况下为每个组显示一行表格,并在表格行中显示模式为0的该组的所有注册

第一个解决方案(可能是更好的一个):首先用上面给出的方法找到所有允许的群。对于每一行(在
cellforrowatinexpath:
)过滤该组的注册并绘制单元格

第二种解决方案:获取所有注册并按组进行排序。这只需要一个获取请求,但结果不如表视图数据源那样合适。获取请求如下所示:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Enrollment"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"mode = 0 AND group.mode = 0"];
request.predicate = predicate;
NSSortDescriptor *sort1 = [NSSortDescriptor sortDescriptorWithKey:@"group.name" ascending:YES];
NSSortDescriptor *sort2 = [NSSortDescriptor sortDescriptorWithKey:@"share" ascending:YES];
request.sortDescriptors = [NSArray arrayWithObjects:sort1, sort2, nil];

根据你的问题和评论,我猜测你想要的

[NSPredicate predicateWithFormat:@"mode = 0 AND (ALL enrollments.mode = 0)"]
更新

似乎所有的聚合都不起作用。它抛出

'NSInvalidArgumentException', reason: 'Unsupported predicate (null)'
正如@yunas所注意到的。之前也注意到了这一点,例如

另一方面,任何骨料都可以正常工作。因此,作为一种解决方法,可以用等效的ANY表达式替换ALL:

[NSPredicate predicateWithFormat:@"mode = 0 AND NOT(ANY enrollments.mode != 0)"];
这确实有效(我已经测试过了)

更新2

在讨论过程中,很明显,yunas希望在模式为0的情况下为每个组显示一行表格,并在表格行中显示模式为0的该组的所有注册

第一个解决方案(可能是更好的一个):首先用上面给出的方法找到所有允许的群。对于每一行(在
cellforrowatinexpath:
)过滤该组的注册并绘制单元格

第二种解决方案:获取所有注册并按组进行排序。这只需要一个获取请求,但结果不如表视图数据源那样合适。获取请求如下所示:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Enrollment"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"mode = 0 AND group.mode = 0"];
request.predicate = predicate;
NSSortDescriptor *sort1 = [NSSortDescriptor sortDescriptorWithKey:@"group.name" ascending:YES];
NSSortDescriptor *sort2 = [NSSortDescriptor sortDescriptorWithKey:@"share" ascending:YES];
request.sortDescriptors = [NSArray arrayWithObjects:sort1, sort2, nil];

一个组有许多注册,那么“组中注册的模式=0”到底是什么意思?我也需要在enrollment.mode上应用筛选器,以便它反映总体结果。正如我所说,如果我正确阅读图表,一个组有多个注册。你的意思是“组中所有注册的模式=0”吗?是的group.mode=0和registration.mode=0组中有许多注册,那么“组中注册的模式=0”到底是什么意思?我也需要在registration.mode上应用过滤器,以便它反映整体结果。正如我所说的,如果我正确阅读图表,则一个组有多个注册。您的意思是“组的所有注册的模式=0”?是的group.mode=0和registration.mode=0我们可以(所有注册的模式=0)???我的问题是,我不知道如何访问嵌套对象属性。我不会给出这个答案。我不太相信它是正确的。如果有效的话,你现在应该试试。如果有效:好的,接受我的回答。如果没有:显示您的代码并再次询问。您还可以查看。在一开始的时候,它有“ALL children.age>12”这样的例子。这个家伙说你不能引用子实体名称,这是一个完全不同的问题!这里没有任何子实体,在获取请求中也不需要实体名称。您有一个实体“组”和另一个实体“注册”,它们之间有一对多关系。我们可以这样做吗(ALL enrollments.mode=0)???我的问题是,我不知道如何访问嵌套对象属性。我不会给出这个答案。我不太相信它是正确的。如果有效的话,你现在应该试试。如果有效:好的,接受我的回答。如果没有:显示您的代码并再次询问。您还可以查看。在一开始的时候,它有“ALL children.age>12”这样的例子。这个家伙说你不能引用子实体名称,这是一个完全不同的问题!这里没有任何子实体,在获取请求中也不需要实体名称。您有一个实体“组”和另一个实体“注册”,它们之间有一对多关系。