1

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

我有两个数组

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

然后我有核心数据实体RockstarPerson。并且两者之间是一对多的粉丝关系。

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

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

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

最后

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

恐怕这会导致两个问题:

  1. fanPredicate 的正确语法是什么?它适用于一个值,但它在数组上崩溃

  2. 这完全可以用复合谓词吗?我认为如果Person实体为空,我会从 CompoundPredicate 中获得零记录。

4

1 回答 1

1

这可以通过“SUBQUERY”来实现:

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

该谓词适用于所有Rockstar对象,这些对象没有在给定列表中的相关Person对象。personId

于 2021-07-21T10:55:37.720 回答