gpt4 book ai didi

ios - NSPredicate 用于 2 对多关系

转载 作者:可可西里 更新时间:2023-11-01 06:07:26 28 4
gpt4 key购买 nike

我对 NSPredicate 的语法有疑问。我有 3 个实体:A、B 和 C。A 与 B 具有多对多关系。B 与 C 具有多对多关系。我想获取 A 中至少具有一种关系的所有托管对象B 中的一个对象反过来又与 C 中的至少一个对象有关系。

我已经尝试了 SUBQUERY 和 ANY 的一些变体,但显然我没有使用正确的语法。

我试过:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *ent = [NSEntityDescription entityForName:@"A" inManagedObjectContext:self.managedObjectContext];
fetchRequest.entity = ent;
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"(SUBQUERY(B, $b, $b.c.@count > 0).@count > 0)"];

结果是:

2014-06-30 09:07:12.143 我的应用程序 [86086:60b] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“包含 KVC 聚合的 key 路径不应该存在;无法处理 $b.jobs.@count'

然后:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"ANY b.c.@count > 0"];

结果:

2014-06-30 09:10:14.403 我的应用程序 [86186:60b] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“不支持的函数表达式计数:(b.c)”

还有:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"(SUBQUERY(B, $b, $b.c.@count > 0))"];

结果:

2014-06-30 09:17:25.883 我的应用程序 [86218:60b] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“无法解析格式字符串”(SUBQUERY(B, $ b, $b.c.@count > 0))"'

最后:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"(SUBQUERY(B, $b, $b.c).@count > 0)"];

结束于:

2014-06-30 09:18:30.202 我的应用程序 [86272:60b] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“无法解析格式字符串”(SUBQUERY(B, $ b, $b.c).@count > 0)"'

有人知道吗?必须有一种简单的方法来执行此获取...

最佳答案

这应该有效:

[NSPredicate predicateWithFormat:@"SUBQUERY(bs, $b, ANY $b.cs != NULL).@count > 0"]

其中“bs”是从实体AB的对多关系,“cs”是从B C

关于ios - NSPredicate 用于 2 对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24491740/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com