2009-12-09 60 views
0

我有一個核心數據中的「至多」關係,沒有反向關係,刪除規則設置爲「Nullify」和「No action」(我的意思是我已經無濟於事都嘗試)核心數據不保存已被刪除的關係

基本上我有一個MergedStation其屬性變電站指向許多車站對象:MergedStation.subStation - >>站

當我打電話[mergedStation addSubStationsObject:newStation];(這是動態創建的)一切效果很好,添加了一個新站點,所有內容都被刷新並正確保存,以便下次打開該程序時,一切正常。

但是,當我呼叫[mergedStation removeSubStationsObject:stationToRemove];(也是動態創建的)時,只能爲當前程序會話正確刪除所有內容。如果我關閉程序並再次打開它,就像我沒有改變任何東西。我有添加和刪除方法後調用完全相同的方法:

[self.managedObjectContext refreshObject:station mergeChanges:YES]; 

[self.managedObjectContext processPendingChanges]; 

[self.managedObjectContext saveAndPrintErrors]; 

我也嘗試了上述代碼的不同組合來使其工作。任何幫助表示讚賞!

+0

您是否定義了saveAndPrintErrors?你確定保存沒有錯誤嗎?你爲什麼沒有反向關係? – lyonanderson 2009-12-09 17:37:36

回答

4

你的意思是「只爲當前程序會話正確刪除」目前還不清楚。刪除規則指定刪除關係原點(MergedStation)時應發生的情況,而不是關係關係中斷時發生的情況。刪除關聯不應刪除任何實體實例。如果要刪除子站,則必須使用-[NSManagedObjectContext deleteObject:]手動執行該操作。

另一方面,除非您有幾百萬個變電站(或OS X上的數十億個),否則您應該在管理對象模型中包含反向關係。核心數據是一個對象圖管理框架,當所有關係都是雙向時,對象圖管理效果最好(最容易)。核心數據將爲你做很多繁重的工作,如果你包含逆過程。您不需要在您的代碼中使用反轉;如果你願意,你可以忽略它。你付出的唯一處罰是一點記憶。直到你可以證明額外的內存使用對你的代碼是有害的,你應該保持反向關係。

+0

+1包含逆。核心數據期望它。這樣更好地工作。 – mmc 2009-12-21 23:25:28

1

我有這個相同的問題。他所說的「只爲當前程序會話正確刪除」的含義是,如果在重新啓動應用程序之前檢查受管理對象,它處於您希望它處於的狀態(在他的情況下,SubStation對象已從關係中刪除採集)。

我按照建議添加了與數據模型的反向關係,並且一切都神奇地工作。很高興有工作,但我真的很想知道是否有解決方法,而無需支付額外的內存處罰。

0

呃。我在與此密切相關的問題上花費了太多時間。在我的情況下,我將實體添加到多對多關係中,並在重新啓動應用程序後丟失這些更改。加入反向關係是解決問題的方法,但我不明白爲什麼。我的意思是,我明白了爲什麼反向關係是一件好事,但如果單向關係看起來毫無用處,它們應該是強制性的,或者至少由Core Data默認設置。

感謝上面的Erik P給我提供我需要的線索!添加那些反相關係!