NSPredicate 检索所有具有特定孩子的父母? (IOS)

Posted

技术标签:

【中文标题】NSPredicate 检索所有具有特定孩子的父母? (IOS)【英文标题】:NSPredicate to retrieve all parents with specific children ? (IOS) 【发布时间】:2011-10-24 01:04:32 【问题描述】:

假设我在 ios 中有以下核心数据结构:

Parent1
    Child1.1: Text='A', Number=1
    Child1.2: Text='B', Number=1
Parent2
    Child2.1: Text='B', Number=1
    Child2.2: Text='A', Number=2
Parent3
    Child3.1: Text='B', Number=2
    Child3.2: Text='A', Number=1

我想检索所有拥有 Text='A' 和 Number=1 的孩子的父母(上例中的 Parent1 和 Parent3)。

基本上我需要的是父实体上的谓词,如下所示:

ANY (child.Text = 'A' AND child.Number = 1)

但这不起作用 - 我似乎不能在 ANY 关键字后面加上括号。

以下内容也不好(即使它是有效的):

ANY child.Text = 'A' AND ANY child.Number = 1

因为它也返回 Parent2。

有没有办法在谓词中做到这一点,或者我必须以编程方式做到这一点(例如,不使用 ANY 关键字只检索孩子并从后面的关系构造一个父母数组)?

【问题讨论】:

【参考方案1】:

在谓词中,您必须使用 == 来表示相等 - 那么它有效吗?

您还可以查看 NSCompoundPredicate 用于将谓词部分与 AND 和 OR 结合起来,例如

NSMutableArray* predicatesToCombine = [[NSMutableArray alloc]init]; [predicatesToCombine addObject:@"child.Text == 'A'"]; [predicatesToCombine addObject:@"child.Number == 1"]; NSPredicate* predicate = [NSCompoundPredicate andPredicateWithSubpredicates:predicatesToCombine]; ... [predicatesToCombine release];

【讨论】:

NSPredicate 将 = 转换为 ==,两者是一样的。此外,我已经在使用 NSCompoundPredicate (我给出的示例已简化),它与问题无关 - 它仅将简单谓词与 AND 或 OR 组合或在简单谓词之前与 NOT。我的问题是 ANY 关键字后跟括号,而不是括号内的内容。 @AmiramStark,通过显示实际代码而不是“简化示例”,您将获得更好的答案,否则人们会浪费时间告诉您尝试您可能已经尝试过的事情。 jrturon,当实际代码和简化代码之间没有任何区别时,我认为显示数十行复杂代码毫无意义。根据官方 NSPredicate 格式字符串语法,双等号是无关紧要的,复合谓词对 ANY 关键字没有任何作用。简化的代码有助于专注于实际问题,我相信这是一种更好的方法。

以上是关于NSPredicate 检索所有具有特定孩子的父母? (IOS)的主要内容,如果未能解决你的问题,请参考以下文章

检索给定记录的所有孩子和父母

让所有父母为孩子

过滤器正在返回具有匹配孩子的父母的所有孩子

获取父母的所有可能的孩子/后代

我可以在“工作项树”类型的 TFS 查询中隐藏没有孩子的父母吗?

NSPredicate 用于获取具有特定课程名称的所有学生?