Я создаю приложение OSX с использованием Swift с Coredata в качестве уровня данных. В рамках этого у меня есть таблица, в которой перечислено большое количество файлов, с каждым из которых связаны метаданные. Каждая запись может включать URI, который указывает на одну из трех служб, на которых она может быть размещена.
1. title created_at size uuid source_local source_remote source_cloud
Я генерирую все записи, используя информацию, полученную из локального источника. Все эти записи содержат строку source_local
.
Позже я импортирую несколько записей из удаленного источника. Все эти записи добавляются и имеют строку source_remote
.
Некоторые из этих записей размещены в обеих службах и имеют совпадающие UUID. На поле UUID существует уникальное ограничение, и я хочу, чтобы Swift каким-то образом объединил поля этих двух записей, когда есть ошибка ограничения.
Я пробовал:
NSMergeByPropertyStoreTrumpMergePolicy
и NSMergeByPropertyObjectTrumpMergePolicy
Но эти политики приводят к тому, что одна запись полностью превосходит другую.
В настоящее время мне нужно обойти это ограничение, проверяя, существует ли уже запись с UUID, и обновляя существующая запись с отсутствующими полями в новом файле.
Однако это кажется неоптимальным - есть ли способ создать собственную политику слияния, чтобы Swift автоматически обрабатывал конфликты таким образом? На этом этапе меня не волнует, превосходит ли запись Store или Memory другую, если я могу правильно объединить поля source_*
.
Спасибо