NSPredicate 精确匹配对多核心数据关系
NSPredicate Exact Match For To-Many Core Data Relationship
如果我有一个包含许多 Tag
的 Blog
,我将如何创建一个 NSPredicate
以获得所有 Blog
,并且只有两个 Blog
二、具体Tag
s?
这个:
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
中的任何一个。 ALL
与 IN
结合导致崩溃:
*** 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)。
如果我有一个包含许多 Tag
的 Blog
,我将如何创建一个 NSPredicate
以获得所有 Blog
,并且只有两个 Blog
二、具体Tag
s?
这个:
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
中的任何一个。 ALL
与 IN
结合导致崩溃:
*** 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)。