2012-09-28 44 views
1

我有一個應用程序與服務器通信以獲取當前用戶的一些項目(Item類)並將其存儲。到現在爲止還挺好。在覈心數據應用程序中建模短期對象

我想實現搜索,實質上是返回一組Item對象,但顯然我不想堅持每一個搜索結果。另一個用例是服務器API具有不同的端點,比如推薦/新/即將/返回相同的Item對象,但是在不同的上下文中,所以我想以某種方式區分它們。

我的第一個想法是使用丟棄的託管上下文,從API中加載對象,執行獲取以及在用戶完成時只是銷燬上下文。一般來說這是個好主意嗎?它節省了代碼,因爲我的大多數VC已經與核心數據進行了交流。

+1

我有一個很好的朋友,誰是真正的數據庫大師,而他正是這樣做的。他將核心數據用於他所有的數據存儲,並經常使用不必要的上下文。我在我的應用程序中使用它來存儲圖像,並且我總是在重新啓動時拋棄它,因爲我不想擔心腐敗(不是我見過的)或遷移(並且我會不時修改它) 。 –

回答

1

而不是拋棄核心數據的整個美妙的基礎設施,你應該利用它來實現你的目的。

  • 將時間戳屬性添加到您的實體並使用它來選擇性地顯示搜索結果,甚至從舊項目中清除您的店鋪。

  • 爲您的實體添加類別屬性並在搜索時按類別過濾。

兩者都可以用NSPredicate實現您添加到您的NSFetchRequest。例如:

fetchRequest.predicate = [NSPredicate predicateWithFormat: 
    @"timestamp > %@", [[NSDate date] dateByAddingTimeInterval:numberOfSeconds]]; 

fetchRequest.predicate = [NSPredicate predicateWithFormat: 
    @"category = %@", @"new"]; 
+0

可以肯定的是,你是否建議我將搜索結果保存在持久存儲中,並使用它們,除非它們太舊? –

+0

沒錯。你可以決定他們何時到期。 – Mundi

+0

這是一個有趣的方法。儘管我的服務器具有搜索結果的排名算法,但我不確定如何將其轉換爲我的CD設置,以及我是否應該。 –