簡體   English   中英

核心數據未保存已刪除的關系

[英]Core Data not saving a relationship that has been deleted

我在Core Data中有一個“ to-> many”關系,沒有反向關系,並且刪除規則設置為“ Nullify”和“ No action”(這意味着我已經嘗試了兩次但無濟於事)

基本上,我有一個MergedStation,其屬性subStations指向許多Station對象:MergedStation.subStation->> Station

當我調用[mergedStation addSubStationsObject:newStation]; (它是動態創建的)一切正常,並添加了一個新工作站,一切都刷新並正確保存,以便下次我打開程序時一切正常。

但是,當我調用[mergedStation removeSubStationsObject:stationToRemove]; (也是動態創建的),所有內容都只能針對當前程序會話正確刪除。 如果我關閉程序並再次打開它,就好像我什么都沒有做。 我在添加和刪除方法之后都調用了完全相同的方法:

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

[self.managedObjectContext processPendingChanges];

[self.managedObjectContext saveAndPrintErrors];

我還嘗試了上述代碼的不同組合以使其正常工作。 任何幫助表示贊賞!

不清楚“僅針對當前程序會話正確刪除”是什么意思。 刪除規則指定刪除關系源(MergedStation)時應發生的情況,而不指定關系斷開時應發生的情況。 刪除關聯不應刪除任何實體實例。 如果要刪除子站,則必須使用-[NSManagedObjectContext deleteObject:]手動進行。

附帶說明一下,除非您實際上擁有數百萬個變電站(在OS X上為數十億個),否則應在管理對象模型中包括逆關系。 核心數據是一個對象圖管理框架,並且當所有關系都是雙向的時,對象圖管理效果最好(最簡單)。 如果包括逆數據,那么核心數據將為您帶來很多繁重的工作。 無需在代碼中使用逆函數。 您可以根據需要忽略它。 您支付的唯一罰款只是一點記憶。 在證明額外的內存使用對代碼有害之前,您應該保持相反的關系。

我有着同樣的問題。 他的意思是“僅針對當前程序會話正確刪除”是指,如果在重新啟動應用程序之前檢查托管對象,則該托管對象處於您希望的狀態(在這種情況下,SubStation對象已從關系中刪除)采集)。

我按照建議的那樣將逆關系添加到數據模型中,並且一切正常進行。 很高興能工作,但是我真的很想知道是否有解決此問題的方法而不必付出額外的內存損失。

啊。 我花了太多時間在與此密切相關的問題上。 就我而言,我是將實體添加到一對多關系中,並且在重新啟動我的應用程序后丟失了那些更改。 添加逆關系是解決問題的方法,但是我不明白為什么。 我的意思是,我明白了為什么逆向關系是一件好事,但如果單向關系看起來似乎毫無用處,則應該由Core Data強制要求或至少應將它們默認。

感謝上面的Erik P給了我所需的線索! 添加那些逆關系!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM