【问题标题】:Does core data delete objects with cascading delete rules instantly or on-save?核心数据是立即删除具有级联删除规则的对象还是保存时删除对象?
【发布时间】:2011-02-14 16:05:34
【问题描述】:

在核心数据模型中,实体 A 与实体 B 具有关系,删除规则设置为 Cascade。对象 B 是在调用 [context deleteObject:A] 时立即删除,还是 Core Data 会像对象验证一样等待 [context save:&error] 方法?

我想知道删除 A 后是否可以创建一个对象 C,然后在上下文中搜索 B 并建立关系。这会阻止 B 被删除吗?

干杯, 埃里克-保罗。

【问题讨论】:

    标签: objective-c cocoa cascading-deletes


    【解决方案1】:

    “已删除”只是一种状态。当用户(或您的应用程序)保存时,该状态如何保持是一个实现细节。如果文件未关闭且状态丢失,保存后仍可撤消。

    如果您的意图是将 A 实例的 B 实例移动到 A 的另一个实例,则需要在删除第一个 A 实例之前更改关系,否则级联规则将采用Bs with it(根据规则行为的确切定义)。一旦删除(无论是直接删除还是通过级联规则删除),它就会被删除。搜索不会显示已删除的 Bs。

    所以:如果您想保留 A 的 B,请在删除原来的之前将 B 分配给另一个 A。否则,您需要为新 A 创建新 B。

    【讨论】:

    • 很好,我的 C 对象不能在删除 A 之前,但现在我知道我必须手动处理关系以防止删除。谢谢!
    • 或者,换个角度看,如果这实际上是一种特殊情况,您不能使用级联规则并删除代码中的 B。如果最常用的方法是将 B 移动到另一个 A,那么无论如何你都是在代码中处理这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    相关资源
    最近更新 更多