1

我有兩個核心數據實體之間的一對多關係。核心數據關係驗證錯誤處理

如下A - >> B

A - >> B:刪除拒絕(即拒絕A的缺失而它們是B的對象)

乙 - > A:抵消

在多個上下文中,一個上下文不知道其他更改,因此在保存父上下文時會出現驗證錯誤,因爲在一個上下文中,子項會插入到正在另一個上下文中刪除的父項。

他們很少或沒有提供有關如何處理驗證錯誤的信息,大多數示例僅向用戶顯示錯誤並放棄更改。如果我需要撤消該特定父對象的刪除,我可以嗎?

有沒有任何選項,我可以如何處理驗證錯誤。 NSValidationRelationshipDeniedDeleteError

+0

您仍然可以使用'mergeChangesFromContextDidSaveNotification'來跟蹤其他上下文中發生的情況 –

回答

0

我沒有找到一種方法來撤銷僅刪除某個對象的刪除而不會丟失更改。因此,如果您刪除了childContext中的父實體,然後保存了childContext,則刪除的實體會自動添加到​​。我嘗試了不同的方法,但是我能夠取消parentContext的刪除操作的唯一方法是致電parentContext.refreshObject(deletedParent, mergeChanges: false)。 (當然你可以嘗試回滾或重置上下文)

這真的取決於你要做什麼(所以這裏的業務影響很大!)。但我認爲你應該樂觀地工作:https://en.wikipedia.org/wiki/Optimistic_concurrency_control 有時,如果發生衝突,可以回滾並重新啓動事務。

通常,childContext將覆蓋parentContext(孩子的優先級更高)的更改。所以你的應用程序的架構應該以同樣的方式工作。當您刪除childContext中的實體時,即使拒絕規則由於您插入了新的子實體而停止了您,也應該在parentContext中將其刪除。你應該做的是你應該刪除插入的實體,然後刪除父實體。否則,你應該重新研究應用程序的體系結構。