ios - nspredicate objective c
Predicado no soportado de datos centrales con ALL e IN (1)
Tengo una solicitud como esta:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY attributes.attribute.attributeId IN %@", attributeIds];
Eso devolverá una lista de objetos, que tienen uno o más de los atributos que establezco. Quiero obtener una lista de los objetos que tienen todos los atributos que paso, así que probé:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ALL attributes.attribute.attributeId IN %@", attributeIds];
Pero tengo una excepción:
''NSInvalidArgumentException'', reason: ''Unsupported predicate (null)''
De todos modos, ni siquiera estoy seguro de que este sea el pedido correcto. Digamos que tengo una lista de atributos: [red, green, blue]
, ¿cómo puedo obtener todos los objetos que tienen al menos esos atributos?
* Object_1 (red, green, blue)
* Object_2 (red, green, blue, yellow, brown)
* Object_3 (red, green blue, black, brown)
pero no Object_4 (red, green, yellow)
porque no tiene el atributo blue
(tenga en cuenta que obtengo los 4 objetos con mi solicitud de búsqueda ANY
, como se esperaba)
editar, pregunta relacionada: ¿y si quiero una coincidencia completa? Entonces, ¿para [red, green, blue]
solo obtendré Object_1
?
edición 2: logré responder ambas preguntas, pero tengo una nueva
Obtener todos los objetos que tienen al menos todos los atributos en la lista
NSPredicate *objectsThatContainsAtLeastAllAttributesInList =
[NSPredicate predicateWithFormat:
@"SUBQUERY(attributes, $s, $s.attribute.attributeId IN %@).@count == %d", attributeIds, [attributeIds count]];
Obtener todos los objetos que solo tienen los atributos en la lista
NSPredicate *objectsWhoseAttributesAreInList =
[NSPredicate predicateWithFormat:
@"attributes.@count == %d AND SUBQUERY(attributes, $s, $s.attributes.id IN %@).@count == %d", [attributeIds count], attributeIds, [attributeIds count]];