swift CoreData 谓词过滤给定父项的所有子数据

swift CoreData predicates to filter all the child data of a given parent

有两个实体 ChildParentParentChild是一对多的关系,一个Parent和很多Child.

我引用的代码如下,它可以过滤Child层的所有数据,其属性text包含yes:

@State private var predicate: NSPredicate? = NSPredicate(format: "text contains[c] %@", "yes")
@ObservedObject private var db = CoreDataDB<Child>()

for child in self.db.loadDB(predicate: self.predicate):
    ....

我想做的是获取属于当前Child层数据的所有Child层数据Parent.

var child: Child

// How to write this line???
@State private var predicate: NSPredicate? = NSPredicate(format: "parent = %@", "self.child.parent")

@ObservedObject private var db = CoreDataDB<Child>()

for child in self.db.loadDB(predicate: self.predicate):
    ....

我不知道如何编写上面的 predicate 来过滤当前 child 视图中与当前 child 属于同一 Parent 的数据。

NSPredicate(format: "parent = %@", "self.child.parent")for child in self.db.loadDB(predicate: self.predicate):.

时什么也得不到

NSPredicate(format: "child.parent = %@", "self.child.parent") 会报错说 keypath child.parent not found in entity <NSSQLEntity Child id=1> with userInfo of (null)

我要说的是,代码中的 text of Child Entity 是我创建的属性,但是 parent of Child Entity 是由 one to manyParent Entity 的关系。我在 xcdataModelId 文件中看不到 parent 属性,但我可以在代码中使用它。

感谢您的帮助。

这里

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

您将 字符串 替换为 %@ 占位符。你要的是

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

搜索所有 parent 等于 self.childparent 的实体。