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

时间:2012-01-30 14:49:13

标签: ios core-data nspredicate

AbBa与多种关系相反。为什么A的这个谓词起作用:

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

虽然这个没有:

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

我认为两个谓词都应该给出相同的结果 - A的集合与bObject通过a<-->b无关。但实际上,第一个给出正确的集合,而第二个没有。

更新


以下为sample project,其中AbAccountfiltered_clientsB体现。a是体现在Clientfiltered_by

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

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

3 个答案:

答案 0 :(得分:3)

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

@"NOT (%@ IN b)"

答案 1 :(得分:0)

来自文档:

  

重要您必须在两者中定义多对多关系   方向 - 也就是说,你必须指定两个关系,每个关系都是   另一个的倒数。你不能只定义一个多对多的关系   一个方向,并尝试将其用作多对多。如果你这样做,你会的   结束参考完整性问题。

所以检查一下:

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

答案 2 :(得分:0)

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

NOT (SELF IN %@)