2010-09-08 82 views
6

我正在使用SQLite持久存儲。我有一個NSManagedObjectDen與對多關係BearBear有幾個領域:引用多對多關係的NSPredicate?

Bear: 
    breed 
    color 
    age 
    ... 

當我建立取請求我Den對象,我可以篩選到具有相關Bear具有一定的字段值對象:

NSPredicate *hasGrizzlyPred = [NSPredicate predicateWithFormat:@"ANY Bear.breed == 'grizzly'"]; 

或者我可以只因爲很容易搜索一個有棕色熊的Den

NSPredicate *hasBrownBearPred = [NSPredicate predicateWithFormat:@"ANY Bear.color == 'brown'"]; 

但是有什麼方法可以搜索一個Den有一隻棕色和灰熊的熊?以下是合法的,但不正確,我認爲:

// Not quite right: search for a den with a brown bear AND a grizzly 
NSPredicate *hasBrownAndGrizzlyPred = [NSPredicate predicateWithFormat:@"ANY Bear.color == 'brown' AND ANY Bear.breed == 'grizzly'"]; 

回答

6

您可以使用SUBQUERY謂詞表達式來做到這一點。在與熊窩點(其中Den有一個一對多的關係,Bear名爲bears)查詢的情況下,既棕色和灰熊:

[NSPredicate predicateWithFormat:@"SUBQUERY(bears, $b, $b.color=='brown' AND $b.breed=='grizzly')[email protected] > 0"];

+0

核心數據文檔離開我...有時感到沮喪。太棒了。 – 2010-09-08 03:17:46

+1

我已經指出許多人到'NSExpression'文檔。請在bugreporter.apple.com上提供一份關於文檔的錯誤報告,並建議如何提交它,以便您能夠儘早找到它。 – 2010-09-08 03:34:49

+0

它可能會保存。@計數值? – Piero 2012-04-17 19:14:11