2010-04-19 68 views
1

假設我有一個實體用戶,它與實體菜單有一對多的關係,它與具有多對一關係的實體餐具有一對多的關係實體配方與實體元素具有一對多的關係。 我想要做的是選擇屬於特定用戶(用戶名= myUsername)和特定菜單的元素s(最小日期< menu.date < maxDate)。iPhone核心數據 - 訪問多種關係的深度屬性

有沒有人有想法如何讓他們?

謝謝

回答

2

您想要對元素實體進行提取。根據你的描述,目前還不清楚你是否定義了反向關係1(例如元素到收件人)以及他們是多人還是一人。假設你有他們定義,他們是對的,你可以做像[2]謂詞中的抓取:對USENAME不區分大小寫和變音符號,大小寫的比較

[NSPredicate predicateWithFormat:@"%@ > recipe.meal.menu.date && recipie.meal.menu.date < %@ && recipie.meal.menu.user.username LIKE[cd] %@", minDate, maxDate, myUsername]; 

我用LIKE[cd]。另請注意,核心數據存儲日期爲雙重NSTimeInterval,沒有時區信息。如果你想做時區敏感的日期比較,你需要做更多的工作。

1如果您還沒有定義相反的關係,這樣做。正如其他地方多次說過的,Core Data是一種圖形管理框架,它恰好能夠將其圖形保存到磁盤。如果您定義了反向關係,它將自動執行很多幕後工作以保持參考完整性。特別是對於多對多關係,Core Data實際上需要相反才能使事情順利進行。

[2]如果你已經定義了許多我認爲是的倒數,你必須使用一個稍微複雜的謂詞。第一條,例如,將

@"ANY (@unionOfSets.recipe.meal.menu.date) < %@" 

(這最後一位是未經檢驗,該志願組運營商總是有點經歷過了我的)。您可以閱讀set and array KVO運營商。

+0

謝謝......它(第二種情況)幾乎是我在找的東西!食譜和餐食之間有一對多的關係。我不明白的是@unionOfSets。它有什麼作用?它是否「融合」了多種關係(在我的情況下是餐)?或者我必須寫:配方。@ unionOfSets.meal.menu.date? – ncohen 2010-04-19 23:35:36

+0

哦,我忘了......我的一些元素與配方沒有關係!所以當我嘗試這個:@ unionOfSets.recipe.meal.menu.date我得到一個錯誤!我怎樣才能擺脫這一點? – ncohen 2010-04-19 23:42:03

+0

您可以在http://union.apple.com/mac/library/documentation/cocoa/conceptual/KeyValueCoding/Concepts/ArrayOperators.html上閱讀@unionOfSets。是的,你可能需要'recipie。@ unionOfSets'。 – 2010-04-20 16:37:01