如何根据多关系集是否包含特定值使用 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")