2013-07-24 68 views
0

下面是關係圖。我有一套我已經檢索的食譜和一套BaseIngredients。我想返回一套包含所有這些成分的食譜。我目前的謂詞編寫一個NSPredicate,用於跨多個關係過濾結果

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN %@ AND ingredientSections.ingredients.baseIngredient IN %@", recipes, self.ingredientsFilter]; 

失敗慘不忍睹。這樣做的正確方法是什麼?

Object Graph

回答

1

隨着嵌套一對多的關係,你可能需要一個子查詢。

以下謂詞返回所有的食譜,其中任何一種成分部分的任何基礎成分是在給定:

[NSPredicate predicateWithFormat:@"SELF IN %@ AND SUBQUERY(ingredientSections, $s, ANY $s.ingredients.baseIngredient IN %@)[email protected] > 0", 
    recipes, self.ingredientsFilter]; 

但不幸的是,這不是正是你需要的。要獲得有包含所有給定成分的 部分中的所有配方,以下可能的工作:

[NSPredicate predicateWithFormat:@"SELF IN %@ AND SUBQUERY(ingredientSections, $s, SUBQUERY($s.ingredients, $i, $i.baseIngredient IN %@)[email protected] == %d)[email protected] > 0", 
    recipes, self.ingredientsFilter, [self.ingredientsFilter count]]; 
+0

你介意到約SUBQUERYs更詳細一點? –

+0

此外,如果成分列表大於1,它會要求所有的基礎成分存在? –

+0

@CameronLowellPalmer:不幸的是,SUBQUERY文檔記錄很糟糕。也許從http://stackoverflow.com/questions/3810992/quick-explanation-of-subquery-in-nspredicate-expression開始。如果這沒有幫助,我會盡力解釋更多。 –

相關問題