2014-12-01 3 views
0

У меня есть объект с именем Image, который имеет отношение ко многим со структурой с тегом. enter image description hereИзвлечь объекты с привязкой к массиву в данных ядра

Предположим, у меня есть массив объектов тегов [tag1, tag2, tag3] Как я могу получить все теги «Изображения», содержащие все из массива?

+0

попытался добавить предикат к вашему NSFetchRequest? –

ответ

1

Имеются следующие отличия:

-1. все изображения, если в списке есть любой тег

NSPredicate(format:"ANY tags in %@", list) 

-2. все изображения, где находятся все теги

NSPredicate(format:"SUBQUERY(tags, $tag, $tag IN %@)[email protected] = %d", 
     list, countElements(list)) 

-3. все изображения, в которых теги содержат по крайней мере все в списке (но, возможно, их больше)

Существует две возможности для этой последней проблемы. Один включает подзапросы, но вы можете сделать это и с составными предикатами.

var subPredicates = [NSPredicate]() 
for tag in tagList { 
    subPredicates.append(NSPredicate(format:"ANY tags = %@", tag)) 
} 
NSCompoundPredicate.andPredicateWithSubpredicates(subPredicates) 
+0

Итак, это отфильтрует все изображения, у которых есть все теги из tagArray в их тегах? – matteok

+0

Нет, с 'ANY' в результате выборки получат изображения, имеющие хотя бы один тег, который находится в списке. Я изменил свой код, чтобы вместо этого использовать «ВСЕ». Теперь он будет получать изображения, в которых есть теги, которые * все * в списке. Или вы хотите, чтобы изображения имели точно идентичный список тегов? – Mundi

+0

Я получаю странное поведение. Используя ЛЮБОЙ, я не получаю ожидаемый результат и использую ВСЕ, я получаю следующую ошибку: Неподдерживаемые предикаты ВСЕ теги IN – matteok

Смежные вопросы