2011-08-09 127 views
1

我已經繼承了使用另一個團隊編寫的核心數據的iPhone應用程序的代碼。在查看對象之間的關係以及如何在代碼中創建/使用對象時,我發現存在內存泄漏到永久存儲器中的情況。果然,當我從核心數據中刪除所有對象留下的所有頂級對象時。還有什麼是一個操作,其中一個對象的值/關係複製到另一個對象,並且這會在Core Data中留下孤立的對象。內存泄漏到永久存儲中

我已經解決了這些問題,並且不再有任何新的孤兒對象存儲在覈心數據中。現在的問題是,我如何從永久存儲已經使用泄漏應用程序的已存在用戶的永久存儲中刪除這些孤立對象,這些用戶知道多長時間?

我最初的想法是將頂級對象複製到另一個ManagedObjectContext。然後刪除原始上下文中的所有對象。最後將頂級對象複製回原始上下文中。有沒有人看到這個問題或有更好的主意?

回答

1

孤立的對象應該有一個空的關係,所以你只能獲取該空關係並刪除返回的對象。

您可能想要更新數據模型以防止孤立的對象。孤兒通常是設計糟糕的模型的標誌。確保所有關係都具有互惠性,並在適當的時候建立關係。您還可以添加驗證以防止孤兒。

+0

你是正確的數據模型是問題的一部分。他們有一些關係設置爲Nullify而不是Cascade。我很好奇你的意思是通過驗證。驗證如何? – iHorse

+0

我同意提取空關係。爲了驗證,他意味着你可以重載validateFor <...>插入,更新,刪除一個託管對象類,並在其中放置一些邏輯。如果失敗,該對象將不會被保存,並且可以選擇構建並引發自己的錯誤消息,如「由於......的孤兒而無法保存對象」 – Leonardo