实体如何在递归模型结构中继承属性?

How can an entity inherit a property in a recursive model structure?

我这里的结构与 post 相同:

看起来像这样:

    cage ---------- animal 1
             |
             |_____ animal 2
             |
             |_____ animal 3 ____ animal 4
                              |
                              |__ animal 5
                                      |
                                      |_____ animal 6

我已经完全按照正确答案实现了我的模型,即

我的问题是,在这种结构下,只有 animal 1 有一个非零 属性 cage,但我希望所有后代动物都有这个 属性 cage 这样我就可以查询笼子 属性 animal6.cage.

我试过手动设置,但相反的关系导致任何带笼子的动物 属性 都是那个笼子的直接子代,这是我不想要的。

是否可以为每只动物继承笼子属性?

您正在以对 Core Data 没有意义的方式使用 "inherit" 和 "child" 等术语。您有 Cage,它与 Animal 相关。 Animal与自身有关系。

就 Core Data 而言,这里没有 parent/child 关系或继承。如果一个 Animal 与另一个相关,则它们只是具有关系的两个实例。一个不能从另一个继承值,因为在任何意义上,一个都不是 Core Data 使用的 "parent" 。这两个实例是两个独立的对象,它们不会像任何两个 non-Core 数据对象那样继承任何东西。

据此,设置 cage 属性 不会使笼子的 Animal 变成 "direct child",它只是说它与笼子有关。如果你想找到任意 Animalcage 而不是在每个实例上设置 cage ,你需要做类似 (Swift-ish 伪代码):

func cage(for animal:Animal) -> Cage {
    var currentAnimal = animal
    var cage = currentAnimal.cage
    while cage == nil && currentAnimal.parent != nil {
        currentAnimal = currentAnimal.parent
        cage = currentAnimal.cage
    }
    return cage
}

如果您只想找到动物的笼子,那很好,但不能在获取请求中使用它。如果您需要在获取时可以使用的东西,您可能需要添加从 AnimalCage 的第二个关系,以便您可以将 "parent" 动物与其他动物区分开来。每个 Animal 都会有一个关系的值,另一个关系将保留给父关系。