gpt4 book ai didi

ios - Core Data 应该如何与我的 "unusual"对象一起使用?

转载 作者:行者123 更新时间:2023-11-29 13:15:52 25 4
gpt4 key购买 nike

我有一个购物 list 应用程序,我正计划将 Core Data 与它一起使用。

我有一个杂货店 Item 抽象类,它具有三个子类:RecipeItemQuickAddItemHybridItem。前两个子类很简单,但是 HybridClass 不同 - 它只是 ivar 是一个数组 other RecipeItemQuickAddItem 对象。

使用方法如下:创建购物 list Item 对象后,所有具有匹配单位类型(例如 1 磅糖、1/2 磅糖)的 Item 对象都放入数组 NSArray *itemsHybridItem 使用以下方法初始化:

- (id)initWithItems:(NSArray *)items

在这个 initWithItems: 方法中,items 数组中的项目被按摩和组合,因此它将作为一个条目出现在购物 list 中。我需要保留实际对象,以便引用它们的来源、添加日期等等...

当我开始为 Core Data 计划架构时,我不确定如何将 HybridItem 类转换为 NSManagedObject。我考虑过的选项:

  • HybridItem 属性 items 设为可转换属性,但据我所知,它存储为“平面”数据 block - 如果我在以后的构建中修改我的 Item 实体并将更新推送给我的用户,他们存储的 HybridItem 将在他们更新后第一次获取时导致问题

  • HybridItem 实体设为 transient 实体,并在每次应用启动时搜索可组合的 Item 对象。缺点是这会导致用户等待 Item 对象的组合

  • HybridItem保留为常规类,并在启动时搜索可组合的Item,缺点同上

  • HybridItem 保留为常规类,并使用 NSCoding 单独序列化。这肯定有一些代码味道

在研究类似我的问题时,常识是将这样的数组属性作为一个单独的实体,并使用关系与对象关联。但我的情况似乎有所不同,因为 items 属性实际上包含一组具有相同父实体(!)的实体。

我最终的考虑是排除不使用核心数据。这将不起作用,因为我的 Items 实体将有其他具有重要关系(数量、度量单位)的实体,这将使 使用 Core Data 变得不可行。

我应该如何编写我的 HybridItem

最佳答案

看起来最直接的方法如下:

  • 在您的 HybridItem 子类中,定义与抽象 Item 类的一对多关系
  • Item 类中,为 HybridItem 类定义称为 parentItem 的一对一关系。
  • 使这 2 个关系相互反转
  • HybridItem 类中,为要根据 items 数组中每个项目的数量计算的任何值定义 transient 属性,例如给定的单位。
  • 当您运行算法以将可组合的项目收集到单个混合项目中时,只需将这些项目添加到与 HybridItem 的对多关系相关联的 items 集合中

请注意,此方法确实允许混合项包含其他混合项。如果您不想这样,则必须引入 Item 的新子类并将其命名为 SingleItem。然后制作 RecipeItemQuickAddItem(但不是 HybridItem)SingleItem 的子类。然后您将创建上述关系,而是在 SingleItemHybridItem

之间创建它们

关于ios - Core Data 应该如何与我的 "unusual"对象一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15845115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com