Xcode 一致性错误: Setting the No Action Delete Rule... is an advanced setting

Posted

技术标签:

【中文标题】Xcode 一致性错误: Setting the No Action Delete Rule... is an advanced setting【英文标题】:Xcode consistency error: Setting the No Action Delete Rule... is an advanced setting 【发布时间】:2011-08-03 12:32:41 【问题描述】:

在 Xcode 中创建数据模型后,它为每个对象关系抛出以下错误:

Consistency Error:
Setting the No Action Delete Rule on [object relationship] is an advanced setting

Xcode 试图告诉我什么,我应该如何回应?

【问题讨论】:

【参考方案1】:

Core Data 使用反向关系和删除规则来保持对象图的一致性

假设您有 A.foo B.bar 并执行 a.foo = b。这自动(有效地)执行b.bar = a

现在假设您是[b delete]。使用“无效”规则,b.bar.foo = nil 有效。使用“级联”,它会[b.bar delete]。用“无动作”,它什么也不做; a.foo 现在是“悬空核心数据对象引用”。

它并不是真正的悬空指针;标准内存管理规则意味着b 仍将存在于内存中,而a 指向它(直到a 变成错误),但a.foo 将永远引用已删除的对象,这会引发异常尝试访问其属性。我也不确定当您保存并重新获取 a 时会发生什么。

对于多对多关系,它变得更加复杂。实施细节:关系似乎由一个实体“拥有”,并且仅在保存该实体时才保存(我在尝试跨不同 MOC 建立关系时遇到了这个错误:保存的 MOC 不拥有更新的实体,因此关系从未保存)。很明显,当你删除 both ab 时,关系也应该被删除,所以假设关系消失了,只有其中一个被删除(但你不知道是哪一个! )。


您可能想要 Nullify 或 Cascade。我从不使用 Cascade,因为我永远记不起级联发生的方向。

【讨论】:

+1 用于简明描述。我要补充一点,我通常使用 Nullify,但也发现 Cascade 非常有帮助。如果您使用无操作,那么您可能应该在您的 NSManagedObject 子类上实现 -prepareForDeletion。 在记住级联发生的方向方面,将您在数据模型中选择的实体视为源,将关系的目的地视为目标会有所帮助。当您设置 nullify 或 cascade 时,您正在指定源在删除源时将采取的操作 - 即上面您已在关系 b.bar 上设置了 nullify 或 delete。在 nullify 的情况下,动作是在目标上寻找反向关系并将其设置为 null。所以 nullify 取决于目标上存在的逆,级联不。 嘿,假设是一对多的关系!许多中的一个不应使 ONE 对象无效!它可能真的不执行任何操作!更重要的是,如果我设置 Nullify,尽管它存在,但我无法从数据库中获取该对象! @Stas 如果您使用 Nullify 并删除“许多”对象之一,它应该将其从“一个”对象上的相关对象的 中删除。如果它“不采取任何行动”,就会发生坏事。 @tc 它“应该”做什么并不重要,它所做的是使整个系列无效,这是灾难性的。【参考方案2】:

拒绝 如果关系目的地至少有一个对象,则无法删除源对象。 例如,如果您想删除一个部门,您必须确保该部门的所有员工都首先转移到其他地方(或解雇!)否则无法删除该部门。

无效 将目标对象的反向关系设置为空。 例如,如果您删除一个部门,请将所有当前成员的部门设置为空。仅当员工的部门关系是可选的,或者您确保在下一次保存操作之前为每个员工设置了一个新部门时,这才有意义。

级联 删除关系目标处的对象。 例如,如果您删除一个部门,请同时解雇该部门的所有员工。

无操作 对关系目的地的对象不做任何事情。 例如,如果您删除了一个部门,请让所有员工保持原样,即使他们仍然认为自己属于该部门。

【讨论】:

我有这个问题,我理解你描述的规则,但是我的问题是这样的:如果我删除一个雇主,我不想删除整个部门。然后,我应该使用 Deny ,我知道。但是即使我删除了部门中的最后一个雇主,我仍然不希望从整个部门列表中删除该部门。在这种情况下......我必须克服那些警告,对吧? 哪些警告?在员工与部门的关系中使用“无效”。 这个答案对问题没有真正的帮助,只是重申了规则。

以上是关于Xcode 一致性错误: Setting the No Action Delete Rule... is an advanced setting的主要内容,如果未能解决你的问题,请参考以下文章

### The error may involve defaultParameterMap ### The error occurred while setting parameters

### The error may involve defaultParameterMap ### The error occurred while setting parameters

Xcode真机调试报错:The application could not be verified.

ubuntu16.4 修改菜单到下方 错误:GLib-GIO-Message: Using the 'memory' GSettings backend. Your setting

Django--bug--ImproperlyConfigured: The SECRET_KEY setting must not be empty.

apache运行过程中报MaxClients setting错误问题处理