我在这里有一个与这个帖子相同的结构: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我实现了我的模型,就像正确的答案一样,

对我来说,问题是,使用这种结构,只有animal 1有一个非零属性cage,但是我希望所有的后代动物都有这个属性cage,以便我可以查询笼子属性animal6.cage。
我试过手动设置这个,但是相反的关系会导致任何具有笼子属性的动物都是那个笼子的直接子级,而我不想这样做。
每只动物都有可能继承笼子的财产吗?
发布于 2018-04-11 15:04:27
在使用“继承”和“子”这样的术语时,对核心数据没有任何意义。您有Cage,它与Animal相关。Animal与自身有一种联系。
就核心数据而言,这里没有父/子关系或继承。如果一个Animal与另一个相关,则它们只是两个具有关系的实例。一个不能从另一个继承一个值,因为其中一个不是Core数据使用的任何意义上的“父”。这两个实例是两个独立的对象,它们不会继承任何非核心数据对象所继承的任何东西。
在此之后,设置cage属性并不能使Animal成为笼子的“直接子”,它只是说它与笼子有关。如果您想在不对每个实例设置cage的情况下为任意Animal查找cage,则需要执行以下操作(Swift伪代码):
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,以便您可以区分“父”动物与任何其他动物。每个Animal都有一个关系的值,而另一个关系将保留给父关系。
https://stackoverflow.com/questions/49772456
复制相似问题