gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 00:00:04 24 4
gpt4 key购买 nike

我这里的结构与这篇文章相同: How do I create a recursive one-to-many relationship using core data?

看起来像这样:

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

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

enter image description here

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

我试过手动设置它,但相反的关系会导致任何具有笼子属性的动物成为该笼子的直接子代,这是我不想要的。

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

最佳答案

您正在以对 Core Data 没有意义的方式使用“继承”和“子级”等术语。你有 Cage,它与 Animal 相关。 Animal 与自身有关系。

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

因此,设置 cage 属性并不会使 Animal 成为笼子的“直接子级”,它只是表示它与笼子相关。如果你想找到任意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 的第二个关系,以便您可以将“父”动物与任何其他动物区分开。每个 Animal 都会有一个关系的值,而另一个关系将为父级保留。

关于ios - 实体如何继承递归模型结构中的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49772456/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com