核心数据中父实体的计算属性

时间:2018-08-13 15:58:19

标签: swift core-data

我有一个实体,其中一个属性称为“总计”。实体与其自身有关系。与子实体一对一的关系,与父实体一对一的关系。 Graph

一个父母可以生很多孩子,每个孩子可以有自己的孩子。 每个父母的总数等于其孩子总数的总和。当更改孩子总数或删除影响所有父母总数的孩子到根父母时,我需要采取行动。

Example of parent-child tree

有什么解决办法吗?

1 个答案:

答案 0 :(得分:0)

首先,不清楚total的含义。您曾经说过这是一个财产,然后又说它是根据其子项的价值计算的。对我而言,这意味着您实际上拥有两个不同的属性。一个是value,对于有孩子的实体,该值通常(总是?)为零;另一个是total,它是根据其自身的value加上{{1 }}它的所有子代及其子代。我怀疑这是吸引您的主要想法。

第二个问题是计算value的效率,这可能是一个漫长的递归过程。首先,不要尝试进行预优化。如果您的图形只有几层深,则很可能在需要时计算值不是一个漫长的过程。当且仅当您发现它正在讨论很长时间,并认为最好的方法是在图表中预先计算总数,这并不难。

  1. 在一个位置可以插入,删除节点或更改节点的值。应用程序中的所有更改都转到该位置。
  2. 插入节点后,该图将向上移动,并将其值添加到其所有父级的total属性中
  3. 移除节点后,该图将向上移动,并从其所有父节点的total属性中移除其值
  4. 当节点的值更改时,在图上向上,并从其所有父节点的total属性中减去旧值与新值的差值