如何根据多关系集是否包含特定值使用 NSPredicate 进行过滤
How to filter using NSPredicate based on if the to many relationship set contains a specific value
我有两个实体。一个实体 Person
,另一个 Message
。对于每个人,都有很多消息(因此存在一对多关系)。我需要用 Persons 填充我的 tableView,但只有具有一组消息的 Persons,这些消息至少有一条消息的属性 sent
等于 success
。
如果我说的不清楚,这里基本上就是我想要的:
(显然这个编译不过,我为了题完全编出来的)NSPredicate(Person.messages.contains (sent == "success")
编辑:
忘记提及我使用的是 Core - Data,而不仅仅是常规数组。我需要 NSPredicate 来获取结果控制器。
您可以像这样在 swift 数组上使用过滤函数:
struct Person {
var name: String?
var meessages = [Message]()
}
struct Message {
var sent: Bool = false
}
let arr: [Person] = [
Person(name: "person1", meessages: [Message(sent: true), Message(sent: false)]),
Person(name: "person2", meessages: [Message(sent: false), Message(sent: false)]),
Person(name: "person2", meessages: [Message(sent: true), Message(sent: true)])
]
let filtered = arr.filter({ ([=10=].meessages.filter({ [=10=].sent == true })).count > 0 })
那是因为你的 Persons 数组应该是 NSArray ,NSPredicates 只适用于 Foundation 对象而不是 swift types.in Swift 数组
你有可以调用的过滤器方法并将其传递给过滤闭包。
"ANY" 可以与一对多关系一起使用来查找
至少有一个相关对象满足的对象
一个条件。你的情况:
NSPredicate(format: "ANY messages.sent == %@", "success")
我有两个实体。一个实体 Person
,另一个 Message
。对于每个人,都有很多消息(因此存在一对多关系)。我需要用 Persons 填充我的 tableView,但只有具有一组消息的 Persons,这些消息至少有一条消息的属性 sent
等于 success
。
如果我说的不清楚,这里基本上就是我想要的:
(显然这个编译不过,我为了题完全编出来的)NSPredicate(Person.messages.contains (sent == "success")
编辑: 忘记提及我使用的是 Core - Data,而不仅仅是常规数组。我需要 NSPredicate 来获取结果控制器。
您可以像这样在 swift 数组上使用过滤函数:
struct Person {
var name: String?
var meessages = [Message]()
}
struct Message {
var sent: Bool = false
}
let arr: [Person] = [
Person(name: "person1", meessages: [Message(sent: true), Message(sent: false)]),
Person(name: "person2", meessages: [Message(sent: false), Message(sent: false)]),
Person(name: "person2", meessages: [Message(sent: true), Message(sent: true)])
]
let filtered = arr.filter({ ([=10=].meessages.filter({ [=10=].sent == true })).count > 0 })
那是因为你的 Persons 数组应该是 NSArray ,NSPredicates 只适用于 Foundation 对象而不是 swift types.in Swift 数组 你有可以调用的过滤器方法并将其传递给过滤闭包。
"ANY" 可以与一对多关系一起使用来查找 至少有一个相关对象满足的对象 一个条件。你的情况:
NSPredicate(format: "ANY messages.sent == %@", "success")