核心数据不支持所有和IN谓词
我有这样的要求:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY attributes.attribute.attributeId IN %@", attributeIds];
这将返回一个对象列表,它具有一个或多个我设置的属性。 我想获得具有所有传递属性的对象列表,所以我试着:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ALL attributes.attribute.attributeId IN %@", attributeIds];
但是我有一个例外:
'NSInvalidArgumentException', reason: 'Unsupported predicate (null)'
无论如何,我甚至不确定这是否是正确的要求。 说我有属性列表: [red, green, blue]
, 我怎样才能得到至less有这些属性的所有对象?
* Object_1 (red, green, blue) * Object_2 (red, green, blue, yellow, brown) * Object_3 (red, green blue, black, brown)
但不是Object_4 (red, green, yellow)
因为它没有blue
属性(请注意,我得到所有4个对象与我的ANY
获取请求,如预期的那样)
编辑,相关问题:如果我想要一个完整的匹配? 所以对于 [red, green, blue]
我只会得到Object_1
?
编辑2:我设法回答这两个问题,但我有一个新的
获取列表中至less具有所有属性的所有对象
NSPredicate *objectsThatContainsAtLeastAllAttributesInList = [NSPredicate predicateWithFormat: @"SUBQUERY(attributes, $s, $s.attribute.attributeId IN %@).@count == %d", attributeIds, [attributeIds count]];
获取列表中只有属性的所有对象
NSPredicate *objectsWhoseAttributesAreInList = [NSPredicate predicateWithFormat: @"attributes.@count == %d AND SUBQUERY(attributes, $s, $s.attributes.id IN %@).@count == %d", [attributeIds count], attributeIds, [attributeIds count]];