我在两个核心数据实体之间有一对多的关系。
如下面A->>> B
A - >> B:删除拒绝(即拒绝删除A,而他们是B的对象)
B - >答:Nullify
在多个上下文中,一个上下文不知道其他更改,因此在这种情况下,我在保存父上下文时会收到验证错误,因为在一个上下文中,子项被插入到在另一个上下文中删除的父项。
他们几乎没有提供有关如何处理验证错误的信息,大多数示例只是向用户显示错误并丢弃更改。如果我需要撤消删除那个特定的父对象可以吗?
是否可以选择如何处理验证错误。 NSValidationRelationshipDeniedDeleteError
答案 0 :(得分:0)
我没有找到一种方法来撤消对某个对象的删除而不会丢失更改。因此,如果您删除了childContext
中的父实体,然后保存了childContext
,则已删除的实体会自动添加到parentContext.deletedObjects
。我尝试了不同的方法,但我能够从parentContext
取消删除操作的唯一方法是调用parentContext.refreshObject(deletedParent, mergeChanges: false)
。 (当然你可以尝试回滚或重置上下文)
这实际上取决于你要做什么(所以这里的业务影响很大!)。但我认为你应该乐观地工作:https://en.wikipedia.org/wiki/Optimistic_concurrency_control 有时,如果发生冲突,可以回滚并重新启动事务。
通常,childContext
会覆盖parentContext
的更改(子级具有更高的优先级)。所以你的应用程序的架构应该以相同的方式工作。当您删除childContext
中的实体时,您也应该在parentContext
中将其删除,即使拒绝规则因您插入了新的子实体而停止了您。你应该做的是你应该删除插入的实体然后删除父实体。否则你应该重新研究应用程序的架构。