NSPredicate:搜索相关值的数组,NOT

NSPredicate: search for an array of values in relation, NOT

我有点迷茫,希望你能帮助我。

我有两个数组

let stars = ["Paul", "Ringo"]
let visitors = ["bob", "mary"]

然后我有核心数据实体 RockstarPerson。以及两者之间的一对多关系 fans.

现在我想找到几个特定的​​ Rockstar,并确保他们没有访客作为粉丝。

我尝试用复合谓词来做到这一点,大致如下:

let starsPredicate = NSPredicate(format: "id IN %@", stars)
let fansPredicate = NSPredicate(format: "NOT (fans.personid CONTAINS %@)", visitors)

最后

let compoundPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: [starsPredicate, fansPredicate])

恐怕这会导致两个问题:

  1. fansPredicate 的正确语法是什么?它可以很好地处理一个值,但它会在数组

    上崩溃
  2. 复合谓词是否可能?我想如果 Person 实体是空的,我从 compoundPredicate 得到零条记录。

这可以通过“子查询”来实现:

let fansPredicate = NSPredicate(format: "SUBQUERY(fans, $f, $f.personid IN %@).@count = 0",
                                visitors)

谓词对于所有 Rockstar 对象都为真,这些对象没有相关的 Person 对象,其 personId 在给定列表中.