核心数据托管对象集

Posted

技术标签:

【中文标题】核心数据托管对象集【英文标题】:Core Data Managed Objects Sets 【发布时间】:2014-04-14 18:30:42 【问题描述】:

我正在尝试编写一个简单的个人理财应用程序供自己使用,并遇到以下问题,想知道是否有人可以帮我解决问题。

我的数据模型非常简单,我有一个“帐户”托管对象,它有一个“事务”托管对象的 NSSet,而后者又具有一个“拆分”托管对象的 NSSet。

“拆分”对象具有类别和金额,因此任何交易都可以由具有不同金额的多个类别组成。例如,交易总额为 40 英镑,由 25 英镑 - 食品和 15 英镑 - 燃料等组成

“事务”托管对象还可以与另一个“事务”托管对象具有可选的 1 对 1 关系。这是在我想代表转会时使用的。因此,我有 2 个具有相同属性(如日期等)的“交易”对象,但每个都属于不同的“帐户”,因此当我查询帐户的交易列表时会显示出来。

我已经覆盖了像 setDate 这样的“事务”托管对象上的适当设置器,因此当调用它时,它会检查它是否有另一个“事务”托管对象链接到它,如果有,也会更改日期那笔交易。这样一来,对一项交易所做的更改就会反映在另一项帐户交易中。

还和我在一起..?现在问题出在事务的“拆分”对象的 NSSet 上。

假设我在账户 A 中创建了一个新交易。 我设置了交易日期 我为交易创建了一个“拆分”对象,为了争论,它有一个 20 英镑的食物类别。 然后在我的 UI 中,我说这个交易是一个转移。这提示我选择要转移到的帐户,我选择帐户 B。 在后台,创建了一个新的“交易”对象,其账户设置为账户 B,我从账户 a 中的原始交易复制日期等,但我想将两个“交易”对象设置为指向同一个 NSSet '分裂'。

这样,如果我更改其中一项交易的拆分类别或金额,它会反映在另一笔交易中吗?对更简单属性的更改是通过前面提到的 setDate 等设置器处理的。两个“事务”对象可以指向同一个拆分的 NSSet,还是我必须在进行更改时手动同步两个集合的更改?

希望这是有道理的,并感谢收到的任何帮助。

【问题讨论】:

转会真的有分裂吗?用例是什么? 【参考方案1】:

事务和拆分实体之间的关系必须是多:多。

如果您想这样做,那么最好创建自定义方法来设置传输和拆分,而不是尝试覆盖。您确实需要编写如何根据对另一个对象关系的更改来更新一个关系的逻辑。配置好关系后,另一端的对象是通用的,因此对拆分实例的更改是微不足道的。

使用 mogenerator 将您的自定义代码与自动生成的代码分开管理也是一个好主意。

【讨论】:

感谢您的信息,您能给我一些简单的示例代码来帮助我吗? 哪一部分?它基本上和你说的你已经拥有的一样。自定义方法只是提供了设置传输事务并将拆分同时连接到自己和它的能力......【参考方案2】:

我建议更改您的模型。

事务实体用于拆分实体共享的数据,例如日期和描述。每个事务始终至少有 1 个拆分(如果您正在进行系统复式记账,则为 2 个拆分)。您可以通过拆分实体公开事务属性。

您的 Account 实体与 Transaction 没有直接关系。它只会与拆分实体有直接关系。

【讨论】:

以上是关于核心数据托管对象集的主要内容,如果未能解决你的问题,请参考以下文章

核心数据:我的托管对象上的托管对象上下文为零

如何识别核心数据托管对象模型——哈希?

如何在核心数据中将非托管对象更改为托管对象

核心数据:托管对象和实体之间的区别?

核心数据 - 托管对象问题

停止与核心数据托管对象相关的堆增长