2011-10-24 90 views
0

说我有在IOS以下核心数据结构:NSPredicate检索具有特定孩子的所有父母吗? (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 

我想以检索有一个孩子与文本的所有家长=“A”和总数= 1(Parent1和Parent3在上面例)。

基本上我需要的是看起来像父实体谓词:

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

但是,这并不工作 - 看来我不能有以下的任何关键字括号。

下面是不是是好(尽管它是有效的):

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

,因为它返回Parent2为好。

有没有一种方法可以在谓词中做到这一点,或者我必须以编程方式执行此操作(例如,仅使用ANY关键字检索子元素并从背部关系构建父数组)?

回答

0

在一个谓词中,你必须使用==来表达相等性 - 它能够工作吗?

您还可以看看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]; 

+1

NSPredicate转换=到==,两者是相同的。另外,我已经使用NSCompoundPredicate(我给出的例子被简化了),它与问题无关 - 它只是将简单的谓词与AND或OR组合起来,或者在NOT之前使用简单的谓词。我的问题是ANY关键字后面是括号,而不是括号内的内容。 –

+0

@AmiramStark,你会通过显示你的实际代码而不是“简单的例子”来得到更好的答案,否则人们会浪费时间告诉你尝试你可能已经尝试过的事情。 – jrturton

+0

jrturon,当我看到实际代码与简化代码之间没有任何区别时,我发现在显示数十行复杂代码方面毫无意义。根据官方的NSPredicate格式字符串语法,双等号是不相关的,复合谓词对ANY关键字不做任何处理。简化的代码有助于关注实际问题,我相信这是一个更好的方法。 –

相关问题