Ios 为什么;不在「;在此NSPredicate中不起作用?

Ios 为什么;不在「;在此NSPredicate中不起作用?,ios,core-data,nspredicate,Ios,Core Data,Nspredicate,Ab和bA与许多关系相反。为什么A的谓词起作用: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT SELF IN %@", bObject.a]; 而这一条没有: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT %@ IN b", bObject]; 我认为这两个谓词应该给出相同的结果-通过ab收集与bObject无关的As。但事实上

A
b
b
A
与许多关系相反。为什么
A
的谓词起作用:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT SELF IN %@", bObject.a];
而这一条没有:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT %@ IN b", bObject];
我认为这两个谓词应该给出相同的结果-通过
ab
收集与
bObject
无关的
A
s。但事实上,第一个给出了正确的集合,而第二个没有

更新:


这里是一个示例,其中
a
b
帐户
过滤的\u客户机
体现,
b
客户机
过滤的
体现

切换
MasterViewController.m
中第143行和第144行的注释以查看差异


请帮助我在我的代码中找到bug,或者确认它是一个
核心数据
bug,这样我就可以向苹果报告它了。非常感谢。

来自文档:

重要信息:您必须在这两个方面定义多对多关系 方向也就是说,您必须指定两个关系,每个关系都是 与另一个相反。你不能只定义一对多的关系 一个方向,并尝试使用它作为多对多。如果你这样做,你会的 最终导致引用完整性问题

因此,请检查以下内容:

  • A和B有一对多的关系
  • B和a有一对多的关系
  • A关系与B关系相反
  • B关系是A关系的倒数
    这里还有另一个想法:可能它试图用
    NOT
    来“否定”
    bObject
    。因此,请尝试:

    @"NOT (%@ IN b)"
    

    我想我找到了这个问题的答案。显然,你确实需要使用SELF来让它工作,至少在我的情况下是两对多关系。这对我很有用:

    NOT (SELF IN %@)
    

    您的第二个谓词似乎在测试b是否不在b中-这就是您的意思吗?正如Nick所指出的:您能给出更多的代码吗。
    b
    变量是什么?如何生成获取请求?更清楚地说,我已经将变量名更改为“bObject”,这是B.A.B的一个实例,B.A与许多关系相反。这表明b a是多对多-对吗?嘿,伙计们,我创建了一个示例项目。请阅读有问题的更新。请阅读问题和下面的评论。当然,这是一种多对多的关系。我创建了一个示例项目。请阅读相关更新。