Predicados compuestos de iOS

Estoy escribiendo una aplicación que tiene una base de datos de fotos. Cada foto tiene varias etiquetas asociadas y la aplicación tiene una página de búsqueda con muchos conmutadores que permiten a los usuarios buscar fotos basándose solo en las etiquetas que les interesan. Cada una de estas etiquetas han almacenadoentero Las identificaciones se deben a las identificaciones de una base de datos externa, así que estoy tratando de buscarlas simplemente por identificación.Todos los campos de identificación están indexados.

El problema surge cuando los predicados que estoy escribiendo se vuelven bastante grandes porque el usuario puede seleccionar entre muchas etiquetas diferentes para filtrar. Esas etiquetas se agrupan en 3 categorías [publicaciones, marcas y productos], por lo que mis consultas se configuran para ser "OR" dentro de una categoría, y "AND" en estas categorías.

Un ejemplo de predicado de consulta termina buscando algo como esto:

(parentPublication.publicationId==1 OR parentPublication.publicationId==2 OR parentPublication.publicationId==5) 
AND (ANY brands.brandId==12 OR ANY brands.brandId==2 OR ANY brands.brandId==0 OR ANY brands.brandId==3 OR ANY brands.brandId==5 OR ANY brands.brandId==6 OR ANY brands.brandId==7) 
AND (ANY products.productId==2 OR ANY products.productId==3 OR ANY products.productId==6)

Pueden hacerse mucho más grandes, pero tú entiendes el punto. Mi problema es, ya que todos estos sonrealizando costosas combinacionesUna vez que el usuario selecciona más de 10 o 15, las consultas se ejecutan extremadamente largas, e incluso pueden hacer que la aplicación se bloquee.

Parece que sería más eficiente escribir algo como:

parentPublication.publicationId IN (1,2,5) 
AND (ANY brands.brandId IN (12,2,0,3,5,6,7))
AND (ANY products.productId IN (2,3,6))

Pero parece que no puedo conseguir que la sintaxis funcione.

Entonces, mi pregunta es: ¿se admite este tipo de sintaxis y, si es así, alguien me puede mostrar cómo escribirlo correctamente?

¿O hay una mejor manera de abordar este tipo de consultas contra Core Data en conjunto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta