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

问题描述 投票:0回答:1

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

我所指的代码如下,它可以过滤属性Child包含textyes级的所有数据:

@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的视图中写入上面的Parent来过滤与当前child属于同一child的数据。

[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)

[我需要说的是,代码中textChild Entity是我创建的属性,但是parentChild Entity是通过与one to manyParent Entity关系自动创建的。我在parent文件中看不到xcdataModelId属性,但可以在代码中使用它。

感谢您的帮助。

ios swift core-data nspredicate
1个回答
0
投票

这里

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

您用string代替%@占位符。您想要的是

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

搜索parent等于parentself.child的所有实体。

© www.soinside.com 2019 - 2024. All rights reserved.