2013-04-20 105 views
0

我有一個實體,我想要獲取某個屬性。核心數據提取

例如,

比方說,我有一個實體,稱爲食品,具有多個屬性。我想選擇所有類別,這是每個食品的屬性。在Core Data中完成此操作的最佳方式是什麼?

+0

如果可能,你應該建立一個類別實體,然後建立與食品的關係。 – sosborn 2013-04-20 23:48:06

+0

你有沒有嘗試過適合你的任何東西? – 2013-04-22 18:30:35

+0

@DavidRönnqvist是的,我只是取得所有的實體,並篩選出重複的結果 – Vikings 2013-04-26 00:42:35

回答

1

只需運行您的提取請求,然後使用valueForKey:來提取所有屬性值。如果您的模型包含很多對象,則可以通過這些項目設置提取限制和偏移(以及排序描述符)爲頁面。當你這樣做的時候,你也應該設置獲取請求,不要將對象作爲錯誤返回。

只記得有一個選擇。您可以設置要獲取的屬性,然後將結果類型設置爲NSDictionaryResultType。你仍然需要做迭代,但是這會返回可能的最小數據。

+0

我只是希望更簡單的方法,然後獲取所有實體 – Vikings 2013-04-20 22:41:21

+0

核心數據是一個對象存儲,所以它在對象級而不是屬性級。 .. – Wain 2013-04-20 22:44:49

0

編輯:我想我誤解了你的問題。看來你只想獲取一個對象的屬性,而不是對象本身(例如屬性而不是實體)?我不認爲核心數據會以這種方式工作......它是一個對象圖而不是數據庫,就像上面提到的人一樣。研究核心數據如何「故障」,在需要時自動檢索依賴對象。我留下了下面的建議,以防它仍然適用,儘管我不確定它會如何。

您可以添加一個謂詞到您的搜索中,以便僅獲取符合特定條件的對象;它就像一個「if」語句一樣工作。下面是蘋果的文件:

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSPredicate_Class/Reference/NSPredicate.html

和教程: http://www.peterfriese.de/using-nspredicate-to-filter-data/

所有這一切說,必要性確實取決於你有多少對象獲取。如果它不會導致任何性能下降,那麼獲取一些不需要的對象並不一定是錯誤的。換句話說,解決問題 - 不要「優化」工作正常的事情。但是,如果您的模型包含大量對象,則將它們全部獲取並且您想要使用謂詞可能會很昂貴。

0

您只能獲取整個對象,但您只能在獲取請求中使用nspredicate獲取具有微小屬性的對象。請參閱代碼段中的Xcode代碼片段。在查找字段中查找提取請求,並用nspredicate代碼拖出代碼片段。您可以將謂詞設置爲僅查找滿足此謂詞的對象。希望這可以幫助!