2010-02-10 53 views
3

我正在將大型plist/XML導入到核心數據中。結構很簡單:假設有人和公司,公司可以有很多人。導入成功,但plist沒有建立關係,所以每次有多個人擁有同一個公司時,插入公司的重複項。在覈心數據平面文件導入期間實現查找或創建

一個潛在的解決之道在於Apple's Core Data docs下「實施查找 - 或 - 創建高效」:

Or if you import "flat" data with no relationships, you can create managed objects for the entire set and weed out (delete) any duplicates before save using a single large IN predicate.

我在這句話的年齡盯着,不能解析它。我不是已經在使用託管對象來導入整個集合嗎?他們暗指的是哪些獲取請求?

算法或澄清將不勝感激。

回答

0

在您的示例中,您最好的選擇是在導入期間在公司上執行查找/搜索,以便您可以正確設置關係。根據數據的大小,您甚至可能希望將公司對象保存在NSDictionary的內存中,以便您可以在導入時輕鬆將它們加入到人員對象中。

+0

這聽起來像文件告訴我要避免的。文章說,'這種模式不能很好地擴展。如果您使用這種模式來分析應用程序,那麼通常會發現獲取是循環中更昂貴的操作之一(與僅迭代項目集合相比)。更糟糕的是,這種模式將O(n)問題變成了O(n^2)問題。'這種進口量通常在1000-10000人範圍內。如果性能差異不到一秒鐘,我很高興剛剛實施您的建議。 – spamguy 2010-02-13 21:35:23

+0

這不是你在字典中存儲的人,而是那些應該少得多的公司對象。如果在公司中有多人的情況很少發生,那麼這個解決方案就不能很好地擴展,您可能會想要調用-countForFetch:error:來代替。 – 2010-02-14 05:13:49