为什么“不在”在这个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行的注释以查看差异。

请帮我找到我的代码中的错误,或者确认它是一个Core Data错误,以便我可以将其报告给Apple。 非常感谢。


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

@"NOT (%@ IN b)"

从文档:

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

所以检查一下:

  • A与B有许多关系。
  • B与A有很多关系。
  • A关系与B关系相反。
  • B关系是A关系的倒数。

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

    NOT (SELF IN %@)
    
    链接地址: http://www.djcxy.com/p/10401.html

    上一篇: Why "NOT IN" does not work in this NSPredicate?

    下一篇: Android manifest VM minimal heap size