【问题标题】:Swift: Core Data model relationships to mirror API view modelSwift:核心数据模型关系到镜像 API 视图模型
【发布时间】:2023-03-10 07:52:01
【问题描述】:

我正在尝试创建一个核心数据模型,但作为一个核心数据新手,我不清楚如何将关系用于我的目的。

基本上我需要存储一个看起来像此类的对象(需要更多值,但这是结构),目的是下面本质上是我从特定 API 获取数据时使用的模型,但是我正在尝试实现离线功能,因此基本上需要在核心数据中反映此模型):

class SheetModel {

     uplift: String
     date: String
     time: String
     density: String
     discrepancy: String
     id: String

  Mass {
      unit:  String
      display: String
      unitName: String
   }
  Density {
      unit:  String
      display: String
      unitName: String
   }
  Volume {
      unit:  String
      display: String
      unitName: String
   }
 }

我不清楚如何创建数据模型以允许我存储上述内容。我的(糟糕的)尝试如下:

我知道这里的关系是完全错误的,但不知道我应该在这里做什么。所以显然 Volume、Mass、Density 实体都应该属于存储 uplift、date 等属性的同一个 NSManagedObject。

【问题讨论】:

  • 为什么不使用从主实体“SheetModel”到所有子实体的关系?

标签: swift xcode core-data datamodel


【解决方案1】:

您误解了 CoreData 中“父实体”的含义!这就是您指定继承而不是包含的方式。因此,如果您有一个 Circle 实体,那么它的父实体应该是更通用的 Shape 实体。

您需要清除这些父实体设置,而是将“关系”添加到您的实体。您的每个质量/密度/体积实体应具有目标为StoredRefuelSheet 的关系,删除规则为Nullify,类型为To One。这意味着您不能在两个工作表之间共享一个质量,并且您可以删除一个质量而不删除其拥有的工作表。您还应该设置一个反向关系,以便工作表与目标Mass 具有mass 关系,删除规则Cascade,然后键入To One。这意味着如果您删除一张纸,它所包含的质量也会被删除。

在那之后,您确实实际上有机会使用父实体:您的质量/密度/体积实体都具有相同的字段!对于指定公共字段的抽象父实体来说,这将是一个很好的用例,因此您不必复制它们。

【讨论】:

  • 感谢您提供如此明确的答案 - 非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-11
  • 2012-04-22
  • 1970-01-01
相关资源
最近更新 更多