core-data nspredicate nsset

core-data - nsfetchrequest swift 4



¿Cómo crear un predicado de datos centrales para probar que una relación contiene todos los objetos dados? (2)

El siguiente predicado podría funcionar:

[NSPredicate predicateWithFormat:@"(items.@count == %d) AND (SUBQUERY(items, $x, $x IN %@).@count == %d)", itemSet.count, itemSet, itemSet.count];

El predicado comprueba primero que el número de elementos es igual al tamaño del conjunto de elementos dado, y luego verifica que el número de elementos que son miembros de itemSet también sea igual al tamaño de itemSet . Si ambos son verdaderos, los items deben ser iguales a itemSet .

Preparar:

Tengo un objeto A de Core Data que tiene una relación to-many con B. Llame la relación "items". Entonces, a.items devuelve todos los Bs asociados con A.

Ahora, tengo un NSSet "itemSet" compuesto manualmente de objetos B.

Quiero hacer lo siguiente:

return all A objects whose "items" relation exactly matches itemSet

¿Cómo construyo un predicado para eso? He intentado esto:

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(ALL items in %@)", itemSet];

Pero eso solo me da un Unsupported predicate (null) .

Esta:

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(items in %@)", itemSet];

me dice la unimplemented SQL generation for predicate . Interesante, pero no útil.

Entonces, ¿cuál es la forma correcta de filtrar la relación con un conjunto?


Has probado:

NSPredicate *predicate = [NSPredicate predicateWithFormate:@"items == %@", itemSet];

De forma alternativa, extraiga un subconjunto con un predicado más simple y fíltrelos fuera de la solicitud de búsqueda. es decir

  1. Establecer un predicado para el número de elementos en la relación con el ser el mismo que el número de elementos en su conjunto de comparación.
  2. Obtener los resultados
  3. Filtre estos resultados para mostrar solo aquellos en los que los conjuntos contienen los mismos elementos.