objective ios objective-c core-data nspredicate

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]];