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
- 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.
- Obtener los resultados
- Filtre estos resultados para mostrar solo aquellos en los que los conjuntos contienen los mismos elementos.