У меня есть NSOperationQueue, который импортирует объекты в Core Data, которые я получаю из веб-api. Каждая операция имеет частный дочерний элемент managedObjectContext моего основного управляемого объекта appObjectContext. Каждая операция принимает объект для импорта и проверяет, существует ли объект, в каком случае он обновляет существующий объект. Если объект не существует, он создает этот новый объект. Эти изменения в частных дочерних контекстах затем распространяются до основного контекста управляемых объектов.
Эта настройка работала очень хорошо для меня, , но проблема с дубликатами.
Когда у меня есть тот же объект, который импортируется в двух разных параллельных операциях, я получаю повторяющиеся объекты с одинаковыми данными. (Оба они проверяют, существует ли объект, и он не кажется им уже существующим). Причина, по которой у меня будет 2 из тех же объектов, импортирующих примерно в одно и то же время, заключается в том, что я часто обрабатываю "новый" вызов api, а также "get" api call. Из-за одновременного асинхронного характера моей установки трудно убедиться, что у меня никогда не будет повторяющихся объектов, пытающихся импортировать.
Итак, мой вопрос - лучший способ решить эту проблему? Я думал об ограничении импорта до максимальных параллельных операций до 1 (мне это не нравится из-за производительности). Аналогично, я рассматриваю необходимость сохранения после каждой операции импорта и попытки обработки слияния контекстов. Кроме того, я посчитал, что впоследствии собираю данные, чтобы иногда очищать дубликаты. И, наконец, я рассмотрел просто обработку дубликатов во всех запросах на выборку. Но ни одно из этих решений не кажется мне большим, и, возможно, есть легкое решение, которое я рассмотрел.