2011-07-14 55 views
0

這是一個棘手的問題。核心數據關係,多個託管對象上下文和線程

我有Document實體,當前正從後臺線程上的SQLite數據庫導入到CoreData中。背景線程有一個單獨的上下文,我正在每500個條目分配一次保存。

保存後臺線程上下文會觸發一個通知,該通知抓取我的主線程的上下文並在兩者之間執行合併。

如果我只導入document實體,一切都按預期工作。

當我嘗試建立當前document被創建時,另一個實體briefcase之間的關係時,會出現我的問題。

這就是我的進口程序目前確實:

  • 通過SQLite數據庫行創建Briefcase實體
  • 循環和創造Document實體的每一行
  • 創建迴路中的文檔之間的關係,公文包實體
  • 每隔500行,我保存&重置上下文。這會觸發一個ContextSave通知,該通知抓取主線程並與主線程的上下文合併。
  • 這是我的問題是:保存&復位上面,我Briefcase實體獲取與主線程,所以當我繼續循環合併之後,下一個文檔實體創建試圖將自身與公文包相關聯,這是在我得到一個崩潰,說我無法在單獨的線程上建立對象之間的關係。

我知道,如果在保存後刪除調用以重置上下文的調用,那麼所有操作都按預期工作,但是我的內存佔用量增加了,這不是我準備接受的。

所以我的問題是:

  • 你能想到的周圍(合法的)保持公文包實體整個導入過程,所以我可以繼續創建關係的一種方式?

  • 我的第一個想法是創建沒有上下文的公文包實體,然後在整個過程完成後將其添加到上下文中。這並沒有奏效(它在創作時崩潰了)。

您的想法非常感謝。 羅格

回答

1

回答我的問題:

  • 通過SQLite數據庫行創建公文包實體
  • 環路和創建文檔實體的每一行
  • 創建循環和公文包的文檔之間的關係實體
  • 每隔500行保存上下文&在保存後立即存儲公文包的對象ID
  • 現在它的確定重置上下文
  • (Re)的檢索用的objectID上面保存的公文包實例和existingObjectWithID:錯誤:方法
  • 循環繼續...
相關問題