实体如何在递归模型结构中继承属性?
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",它只是说它与笼子有关。如果你想找到任意 Animal
的 cage
而不是在每个实例上设置 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
}
如果您只想找到动物的笼子,那很好,但不能在获取请求中使用它。如果您需要在获取时可以使用的东西,您可能需要添加从 Animal
到 Cage
的第二个关系,以便您可以将 "parent" 动物与其他动物区分开来。每个 Animal
都会有一个关系的值,另一个关系将保留给父关系。
我这里的结构与 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",它只是说它与笼子有关。如果你想找到任意 Animal
的 cage
而不是在每个实例上设置 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
}
如果您只想找到动物的笼子,那很好,但不能在获取请求中使用它。如果您需要在获取时可以使用的东西,您可能需要添加从 Animal
到 Cage
的第二个关系,以便您可以将 "parent" 动物与其他动物区分开来。每个 Animal
都会有一个关系的值,另一个关系将保留给父关系。