2013-08-29 21 views
0

我有兩個名爲Event和Image的NSManagedObject。 Event類具有一個屬性(也是一個反比關係的關係)命名圖像,它由包含類Image的對象的NSSet組成。用避免殭屍對象的新數據替換核心數據屬性

從服務器更新事件時我只想用新的Image NSSet替換舊的Image NSSet,它也可能包含以前存在的Image對象或新的Image對象。我要做的則是一樣的東西:

event.images = [NSSet setWithArray:imagesParser_.imagesArray]; 

這符合我的目的,但我擔心的是,仍屬於舊的NSSet,現在沒有任何鏈接到任何事件的一些圖片對象,將永遠在數據庫中仍然存在。我認爲在更新之後可能會做一個乾淨的(在沒有事件的數據庫中查看Image對象並從數據庫中刪除它們),但我不知道它的效率如何。

非常感謝。

+0

如果您在覈心數據編輯器中建立了所需的關係,則可以確保嘗試創建孤立實體會導致錯誤。 –

回答

0

用coredata刪除對象非常快。我會親自檢查並刪除附加到我的活動的所有對象,然後添加新的對象。

你也可以採取你的方法,不經常通過並刪除所有圖像沒有任何事件。如果未來圖像可能沒有事件存在(比如說創建一種需要照片的新類型數據),這隻會成爲問題。這真的不是時間或內存密集型。

保持數據庫清潔是一個好主意,否則將來可能會遇到複雜問題。你現在投入的任何努力現在通常會給你帶來好處。如果你不再需要一個對象,可以以某種方式刪除它。

+0

感謝Firo。我看到刪除所有對象然後添加新對象的唯一問題是,一些舊圖像仍可能是新NSSet的一部分。不會刪除一張圖片,然後用相同的ID創建一張圖片來浪費時間? – toupper

+0

您可以將謂詞與提取請求相關聯,該提取請求只會提取其事件關係爲零的圖像對象。 – Max

+0

從技術上講,在您提供的解決方案中,您沒有重用任何圖像(除非_imagesArray手動處理),因爲coredata在比較實體時不使用屬性(或至少是您提供的屬性)。因此,與您的解決方案相比,不,您可能不會注意到任何差異。有很多方法可以嘗試改變它並使其更有效,但這需要一些額外的實施。 – Firo

相關問題