谓词导致所有不存在于太多关系中的对象?

时间:2014-02-13 05:47:20

标签: ios xcode core-data

这是我的表的结构。对于某些特定的联系人(取决于'type'的值),一些联系人被添加到成员中。 我想查询一个组,该组显示不在其成员中的所有联系人(组对象)。以下查询给出其成员中的所有成员 [NSPredicate predicateWithFormat:@"(members CONTAINS %@)",currentGroup] 我试过了  [NSPredicate predicateWithFormat:@"NOT (members CONTAINS %@)",currentGroup]

但没有运气enter image description here

1 个答案:

答案 0 :(得分:0)

通过“成员”关系获取与currentGroup无关的所有群组, 你需要一个带有SUBQUERY的谓词:

[NSPredicate predicateWithFormat:@"SUBQUERY(members, $m, $m == %@).@count == 0", currentGroup]

(原因是“NOT ANY ...”无法正常工作,这似乎是一个核心数据错误。)

但请注意,您已将“成员”关系定义为与其自身的反向关系,这意味着它是对称的:“A是B的成员”意味着“B是A的成员”。

如果没有缩进,则需要两个单独的关系:一对多关系“成员”和一个反向关系“memberOf”,可以是一对一或多对(取决于一个组是否可以多个团体的成员或不。)

然后你必须使用反向关系来获取所有不是的组 当前小组的成员。如果反比关系是多 - 那将是

[NSPredicate predicateWithFormat:@"SUBQUERY(memberOf, $m, $m == %@).@count == 0", currentGroup]

如果反比关系是-1,则只需

[NSPredicate predicateWithFormat:@"memberOf != %@", currentGroup]