为什么“不在”在这个NSPredicate中不起作用?

A bB a是相反的多关系。 为什么这个A工作的谓词:

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT SELF IN %@", bObject.a]; 

而这一个不:

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT %@ IN b", bObject]; 

我认为两个谓词应该给出相同的结果 – 通过a<-->bbObject没有关系的A的集合。 但实际上,第一个是正确的收集,而第二个是不正确的收集。

更新:


这里是一个示例项目,其中A bAccount体现。 filtered_clientsB aClient体现。 filtered_by

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

请帮我find我的代码中的错误,或者确认它是一个Core Data错误,所以我可以报告给苹果。 非常感谢。

这是另一个想法:也许它试图用NOT来“否定” bObject 。 因此,请尝试:

 @"NOT (%@ IN b)" 

从文档:

重要你必须在两个方向上定义多对多的关系 – 也就是说,你必须指定两个关系,每个关系与另一个关系相反。 你不能只在一个方向上定义一个多对多的关系,并尝试把它用作多对多的关系。 如果你这样做,最终会遇到参照完整性问题。

所以检查这个:

  1. A与B有许多关系
  2. B与A有很多关系。
  3. A关系是B关系的倒数。
  4. B关系是A关系的倒数。

我想我find了解决这个问题的人的答案。 显然你需要使用SELF来工作,至less在我的情况下是两对多的关系。 这适用于我:

 NOT (SELF IN %@)