核心数据继承和关系

时间:2013-07-06 00:04:33

标签: core-data

我对核心数据中的继承和关系感到有点困惑,而且我正在跳跃,有人可能会开车到正确的道路。在我的应用程序中,我创建了3个实体,并且它们都没有(并且不具备)公共属性,但是对于用户执行的所有工作,它将是一个保存和加载按钮。根据我的理解,我需要将所有实体“工作”“包装”到一个用于保存和加载的对象中,我的问题是,我是否需要在实体之间创建关系?因为我必须以某种方式联系它们,这对我来说是有意义的。我的逻辑是否正确?

我正在实施预算计算器,为了让每个人都明白我的问题,我会给出一个实际的例子,如果我的逻辑错误,请纠正我:

我们只是说你是一个水果销售商,因为这是正常的,有一个客户数据库,还有一个水果数据库,你会卖出各种水果。根据我的理解,我在这里找到两个实体:

客户端,其中包含名为nameaddressphoneemail等的属性

股票,其中包含以下属性:nameweightstockcostsupplier等。

TheBudget ,其中包含名为nameamounttypecostdelivery等的属性

我没有提供所有属性,因为我认为你明白了。我的意思是你可以看到,我只能继承两个属性;其余的不同。所以,如果我为客户做预算,我可以拥有我想要的客户数量以及库存量,但实际预算呢?

对不起,如果我的解释不是很清楚,但如果是......我应该创建什么样的关系?我认为ClientTheBudget有联系。你有什么建议我的?

1 个答案:

答案 0 :(得分:2)

这并不完全正确,但有些部分是正确的。我把你的问题分解为三个部分:关系,继承和托管对象上下文,希望能帮助你分别理解每个部分:

关系

关系通常用于表示一个实体可以“属于”另一个实体(即员工可以属于公司)。您可以设置多个一对多关系(即员工属于公司和老板),您可以设置反向关系(用'拥有'或'有'这个词更好地描述,例如'一家公司'有很多员工。)

根据您的需要,还有一些更复杂的关系,以及一组删除规则,您可以告诉系统删除​​关系中的实体时要遵循的规则。首次开始时,我发现最简单的方法是坚持上述一对一和一对多的关系。

继承

最好将继承描述为一种用于其他更具体实体的基本模板。您说明可以使用继承作为一种协议来定义一些在多个实体中通用的基本属性,这是正确的。一个很好的例子就是拥有一个基类'Employee',其属性'name','address'和'start date'。然后,您可以创建从此Employee实体继承的其他实体,例如“Marketing Rep”,“HR”,“Sales Rep”等,它们都具有共同属性“name”,“address”和“start date”在每个单独的实体上创建这些属性。然后,如果您想更新模型并添加,删除或修改公共属性,您可以在父实体上执行此操作,并且其所有子项将自动继承这些更改。

托管对象上下文(即保存)

现在,在你的问题/声明的另一部分:将所有实体包装到一个将用于保存和加载的对象中。您不需要创建此对象,核心数据专门用于此目的使用NSManagedObjectContext(简称MOC)。 MOC的任务是跟踪您创建,删除和修改的对象。要保存更改,只需在MOC上调用save:方法即可。

如果您发布实体及其操作,我或许可以帮助就如何在核心数据中设置实体提出建议。您希望尽可能在初始开发过程中尽可能地设置为强大的核心数据模型。操作系统需要能够“升级”后备存储,以包含您在核心数据模型修订之间所做的任何更改。如果您最初在设置核心数据模型方面表现不佳并以这种方式发布代码,那么当应用程序处于疯狂状态时,尝试进行复杂的模型更新可能非常困难(正如您可能已经猜到的那样,是出于痛苦经历的建议:)