2011-09-05 46 views
0

假設我們有一個名爲「Document」的實體,另一個名爲「User」。有多對多的關係,用戶可以擁有一組文檔,每個文檔可以由多個用戶擁有。其他文檔具有「類型」屬性。對多個實體的核心數據過濾

現在我想爲類型爲「pdf」的用戶x提取所有文檔。你將如何訪問這些數據?

至於我可以看到有兩種方式:

  1. 檢索用戶的所有文件,其關係(user.documents)和過濾與NSPredicate陣列(做這項工作具有複雜目的?)。

  2. 用兩個謂詞對「文檔」實體執行提取請求。第一個指定用戶,第二個負責該類型。

哪種方法更好?還是有更好的方法來實現這一目標? 我想第二個解決方案要貴得多。

回答

3

您的要求的實體應該是文檔,您需要使用您的謂詞的任何操作:

[NSPredicate predicateWithFormat: @"ANY users == %@ AND type == %@", userX, @"PDF"]; 

查看聚合操作部分:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html

+0

這是比第一種方式更有效?再次獲取用戶似乎是不必要的,因爲我已經有一個用戶對象引用其文檔。 – Dominik

+0

上面的謂詞將使用單個SQL查詢爲您的userX獲取所有PDF文檔。即使你有文檔的引用,但它們可能是錯誤的,所以過濾一個數組可能會導致每個單獨文檔的SQL查詢被觸發 - 效率更低。 –

+0

要查看執行了哪些SQL查詢,請將'-com.apple.CoreData.SQLDebug 1'添加到啓動參數 –

0

我我已經使用核心數據超過一年,但我剛開始使用關係和其他高級功能...
但是,在我的操作INION,你可以嘗試使用第一種方式,並回答你的問題,我建議你仔細閱讀Predicate Programming Guide