我有一个购物清单应用程序,我计划将 Core Data 与它一起使用。
我有一个杂货Item
抽象类,它有三个子类:RecipeItem
、QuickAddItem
和HybridItem
。前两个子类很简单,但HybridClass
不同 - 它只是 ivar 是other RecipeItem
和QuickAddItem
对象的数组。
下面是它的使用方法:一旦创建了购物清单 Item 对象,所有Item
具有匹配单位类型的对象(例如 1 磅糖,1/2 磅糖)都被放入数组中NSArray *items
,并HybridItem
使用以下方法初始化:
- (id)initWithItems:(NSArray *)items
在此initWithItems:
方法中,items
数组中的项目被按摩和组合,因此它将在杂货清单中显示为单个条目。我需要抓住实际的对象,以便参考它们的来源、添加日期等等......
当我开始为 Core Data 规划架构时,我不确定如何将HybridItem
类转换为 NSManagedObject。我考虑过的选项:
使
HybridItem
属性items
成为可转换的属性,但从我所读的内容来看,它被存储为“平面”数据块 - 如果我Item
在以后的构建中修改我的实体并将更新推送给我的用户,他们的存储HybridItem
将在他们这样做时引起问题他们更新后的第一次获取将
HybridItem
实体设为瞬态实体Item
,并在每次启动应用时搜索可组合的对象。缺点是这将导致用户等待Item
对象的组合保持
HybridItem
作为常规类并在启动时搜索可组合项,缺点与上述相同将 保留
HybridItem
为常规类并使用NSCoding
. 可以肯定的是,这有一些代码气味
当我研究与我类似的问题时,普遍的看法是把像这样的数组的属性做成一个单独的实体,并使用关系与对象关联。但我的情况似乎不同,因为该items
属性实际上包含具有相同父实体(!)的实体数组。
我最后的考虑是我已经排除了只是不使用核心数据。这将不起作用,因为我的 Items 实体将拥有其他具有重要关系(数量、计量单位)的实体,这将使不使用 Core Data 变得不可行。
我应该如何编码我的HybridItem
?