【问题标题】:CoreData many to many relationship insert and delete operationsCoreData 多对多关系插入和删除操作
【发布时间】:2014-09-08 08:29:37
【问题描述】:

我有一个关于 CoreData 关系的问题。

我有这种情况:

我有 DOG 和 BONE 实体。

  • 每只狗可以有更多的骨头。
  • 每个骨头可以有更多的狗。

所以我需要多对多关系。

如何在 CoreData 中设置报表删除?什么样的?

我想我需要这样的东西:

  • 当我删除 BONE 时,我不必移除 DOG;
  • 删除 DOG 时,如果使用的是 DOG 的 BONE,则无需移除 BONE。
  • 当我删除一只狗时,如果这些骨头只用于这只狗,我必须删除这些骨头。

如果我强加这种关系类型,CoreData 的这种机制是自动的吗?

关于插入?

例如:我需要插入带有一些骨骼的 DOG:如何检查骨骼是否已经存在? 我桌子上的每一根骨头都有一个 ID

【问题讨论】:

    标签: ios objective-c core-data many-to-many


    【解决方案1】:

    首先,很难理解您的示例,因为它没有直观意义。话虽如此,忽略实体类型,如果您有一个具有相互对多关系(多对多)的实体 A 和 B。

    Apple: Relationships and Fetched Properties

    (为简洁起见,假设下面的“实体”=“实体实例”)

    插入:

    • 您必须同时插入实体 A 和插入实体 B。核心数据不会 如果您创建实体 A,则自动创建实体 B,只是因为它们有关系
    • 如果您希望将现有实体 B 关联到新实体 A,则 您必须插入实体 A,然后通过 关系。仅仅因为您在对象模型中定义了关系,并不意味着当您插入对象时它们会自动关联。你需要明确地这样做

    删除:

    • Coredata 将允许您设置“关系删除规则”。这将控制当您在关系的一端删除对象时会发生什么。您必须在每一端设置规则,因为您可以选择删除实体 A 或实体 B。删除规则包括:拒绝、无效、级联、无操作。查看 Apple 的相关文档,为您解答上述问题(很清楚)。
    • 要将您的示例应用于删除规则:

    当我删除 BONE 时,我不必删除 DOG; (无动作)
    当我删除一只狗时,如果它是从狗身上使用的,我不必删除骨头。 (拒绝或无效)
    当我删除一只狗时,如果这些骨头只用于这只狗,我必须删除这些骨头。 (级联)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 2023-03-19
      • 2020-11-11
      • 2021-10-27
      • 1970-01-01
      • 1970-01-01
      • 2015-04-01
      相关资源
      最近更新 更多