2013-01-10 50 views
0

我有一個程序,我使用CoreData來管理永久和臨時數據。爲什麼在刪除核心數據中的對象之前需要刪除關係?

在一個實例中,我通過在用戶按下取消時刪除對象來中止添加一些數據。但是當我點擊下一個視圖時,數據仍然存在,附加到它的父核心數據對象。

[self.bar removeFoosObject:self.foo];//Why do I need this line? 
    [self.foo.managedObjectContext deleteObject:self.foo]; 

我最終解決了這個問題,通過手動刪除它的父級的子對象 - 但不是核心數據自動處理?爲什麼我需要第一行?

我運行了一些測試代碼,而且Foo肯定被刪除了 - 代碼正在清理讓我檢查,而且MOC已經設置爲零。內存存在,但它應該非常非常死...

回答

1

您必須手動執行此操作,因爲您的刪除規則設置錯誤。檢查下列蘋果文檔中的關係刪除規則。

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html

或者,它也可能是因爲關係不設置父和子對象之間可選。

而且在刪除對象之後,應該保存數據庫以使其同步。

+0

Hrm ...我會檢查刪除規則,但我會認爲刪除的對象將從其父母中刪除。至於保存數據庫...考慮到我從來沒有保存過它,爲什麼要麻煩? – RonLugge

+0

對於孩子的刪除規則是無效的,這是正確的。子對象也被設置爲父對象的非可選規則,這是正確的。父母將其關係標記爲級聯/可選,但在這裏應該沒有關係。 – RonLugge

+0

當您保存對象時,所有關係都被選中,如果您使用的是核心數據,那麼元素應該通過保存託管上下文將自己保存在持久存儲中。當你保存所有關係被選中時,這裏是自動刪除關係完成的時候。你不能期望它像目標C那樣神奇地發生,因爲它們不是對象,它們是數據庫的實體。因此,如果您刪除該對象,然後保存上下文,那麼父級關係應該被取消。 – Pochi

相關問題