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中将其删除。你应该做的是你应该删除插入的实体,然后删除父实体。否则,你应该重新研究应用程序的体系结构。