使用谓词在 Core Data 中获取父母的所有孩子

Posted

技术标签:

【中文标题】使用谓词在 Core Data 中获取父母的所有孩子【英文标题】:Fetch all children of parents in Core Data using predicate 【发布时间】:2017-08-29 08:03:27 【问题描述】:

我在 Core Data 中有一个 Person - Children 的数据模型关系。 例如,一个人可以有孩子,他的孩子可以有孩子,所以他孩子的孩子可以有孩子,等等。

如何使用谓词获取所有的孩子、孙子和孙子?

【问题讨论】:

一个孩子可以只有一个父母,还是多个? 孩子只能有 1 个父母。 ChildPerson 是不同的实体吗?还是children 是从PersonPerson 的自反关系? @pbasdf 它们只是同一个实体并且是自反的。 @LittleTinyDev 你有解决方案吗? 【参考方案1】:

如果您有一个 Person 对象 thePerson,那么要获取他们的孩子,您将使用以下谓词:

NSPredicate(format:"parent == %@", thePerson)

要获取他们的孙子,请使用:

NSPredicate(format:"parent.parent == %@", thePerson)

对于他们的曾孙,请使用:

NSPredicate(format:"parent.parent.parent == %@", thePerson)

将它们组合在一起:

NSPredicate(format:"parent == %@ OR parent.parent == %@ OR parent.parent.parent == %@", thePerson, thePerson, thePerson)

【讨论】:

感谢您的回答。如果我在我的问题中使用了“固定”示例,请原谅我。但是,如果我不知道获得最外层孩子的级别数怎么办。 我担心你可能想要那个。我认为您可能需要更改模型 - 但我必须考虑如何最好地更改它。

以上是关于使用谓词在 Core Data 中获取父母的所有孩子的主要内容,如果未能解决你的问题,请参考以下文章

谓词因从 Core Data 获取属性类型为“NSDate”对象的对象而失败

在 Core Data 中获取多个 objectID?

在 Core Data 中获取过滤的关系

swift Core Data谓词过滤给定父级的所有子数据

Core Data 多对多谓词(再次)

core data 获取本周数据