swift Core Data谓词过滤给定父级的所有子数据
Posted
技术标签:
【中文标题】swift Core Data谓词过滤给定父级的所有子数据【英文标题】:swift CoreData predicates to filter all the child data of a given parent 【发布时间】:2020-05-31 05:34:45 【问题描述】:有两个实体Child
和Parent
。 Parent
和 Child
是一对多关系,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)
我需要说的是,代码中Child Entity
的text
是我创建的一个属性,但是Child Entity
的parent
是由one to many
与Parent Entity
的关系自动创建的。我在xcdataModelId
文件中看不到parent
属性,但我可以在代码中使用它。
感谢您的帮助。
【问题讨论】:
【参考方案1】:这里
NSPredicate(format: "parent = %@", "self.child.parent")
您用 字符串 代替 %@
占位符。你想要的是
NSPredicate(format: "parent = %@", self.child.parent)
搜索parent
等于self.child
的parent
的所有实体。
【讨论】:
以上是关于swift Core Data谓词过滤给定父级的所有子数据的主要内容,如果未能解决你的问题,请参考以下文章
我需要帮助将 Core Data 的结果放入 Swift 3 中的数组中
Java 8 数据过滤,removeIf 和 filter 别用错了!!
iOS Core Data Predicate 用于根据相关数据进行过滤