为什么“不在”在这个NSPredicate中不起作用?
A
b
和B
a
是相反的多关系。 为什么这个A
工作的谓词:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT SELF IN %@", bObject.a];
而这一个不:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT %@ IN b", bObject];
我认为两个谓词应该给出相同的结果 – 通过a<-->b
与bObject
没有关系的A
的集合。 但实际上,第一个是正确的收集,而第二个是不正确的收集。
更新:
这里是一个示例项目,其中A
b
由Account
体现。 filtered_clients
和B
a
由Client
体现。 filtered_by
。
在MasterViewController.m
切换143行和144行的注释以查看差异。
请帮我find我的代码中的错误,或者确认它是一个Core Data
错误,所以我可以报告给苹果。 非常感谢。
这是另一个想法:也许它试图用NOT
来“否定” bObject
。 因此,请尝试:
@"NOT (%@ IN b)"
从文档:
重要你必须在两个方向上定义多对多的关系 – 也就是说,你必须指定两个关系,每个关系与另一个关系相反。 你不能只在一个方向上定义一个多对多的关系,并尝试把它用作多对多的关系。 如果你这样做,最终会遇到参照完整性问题。
所以检查这个:
- A与B有许多关系
- B与A有很多关系。
- A关系是B关系的倒数。
- B关系是A关系的倒数。
我想我find了解决这个问题的人的答案。 显然你需要使用SELF来工作,至less在我的情况下是两对多的关系。 这适用于我:
NOT (SELF IN %@)