NSPredicate 精确匹配对多核心数据关系

NSPredicate Exact Match For To-Many Core Data Relationship

如果我有一个包含许多 TagBlog,我将如何创建一个 NSPredicate 以获得所有 Blog,并且只有两个 Blog二、具体Tags?

这个:

NSPredicate *tagsPredicate = [NSPredicate predicateWithFormat:@"tags == %@", tagsArray];

导致致命错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'to-many key not allowed here'

我想既然 Core Data 使用集合来处理一对多的关系,我应该使用一个 NSSet,但它给出了同样的错误。

我很难过,因为 ANY tags.name IN %@ 等其他格式将 return 包含两个 Tag 中任何一个的 Blog 中的任何一个。 ALLIN 结合导致崩溃:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unsupported predicate ALL tags.name IN {iOS, programming}'

查询后不过滤结果是不是我想要的?

尝试以下方法:

[NSPredicate predicateWithFormat:@"SUBQUERY(tags, $t, $t IN %@).@count = 2 AND SUBQUERY(tags, $t, NOT $t IN %@).@count = 0", tagsArray, tagsArray];

(即在自然语言中,与我的数组匹配的标签计数为 2,不与我的数组匹配的标签计数为 0)。