Согласно Core Data Documentation , вам не следует продолжать выборку, чтобы увидеть, существуют ли объекты.
Есть много ситуаций, когда вам может понадобиться найти существующие объекты (объекты, уже сохраненные в магазине) для набора дискретных входных значений. Простое решение состоит в том, чтобы создать цикл, затем для каждого значения по очереди выполнить выборку, чтобы определить, существует ли соответствующий сохраняемый объект и так далее. Этот шаблон не хорошо масштабируется. Если вы профилируете свое приложение с этим шаблоном, вы обычно находите выборку одной из более дорогих операций в цикле (по сравнению с простой итерацией по коллекции элементов). Хуже того, этот шаблон превращает проблему O (n) в проблему O (n ^ 2).
Редактировать 16 марта :
Я не эксперт по БД, но, поскольку люди просят более эффективного решения, рассмотрим этот набор:
set1 = [apple, orange, banana, pineapple, lettuce]
Мы хотим выяснить, входит ли [mango, apple, grape]
в этот набор.
В документах говорится, что мы не должны перебирать [манго, яблоко, виноград] и запрашивать базу данных, ища каждый элемент по очереди, потому что это медленно.
Рассмотрим это решение:
Хэш-наборы на стороне сервера:
hash([mango, apple, grape]) = 234095dda321affe...
Затем вы можете полностью обойти Базовые данные, спросив сервер, если что-то изменилось.
Если наборы отличаются, вы можете вывести объекты в контекст управляемого объекта и выполнить массовое сохранение.
Если вы действительно хотите увидеть, является ли каждый объект по очереди частью набора, вы можете сделать выборку на основе индексированной характеристики, такой как «фрукты с кожурой».