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)的主要内容,如果未能解决你的问题,请参考以下文章