Приложение My Swift загружает 3 базы данных из онлайн-API в форме JSON, а затем преобразует объекты JSON в объекты CoreData, чтобы приложение могло функционировать вне доступа к Интернету.
У меня есть сущность Client, которая имеет отношение toMany к сущностям типа Address.Адрес имеет отношение «один к одному» с объектом «Клиент».
Клиент <- >> Адрес
Отношение «Клиент-Адреса» имеет правило каскадного удаления, а отношение «Адрес-клиент» имеет нулевое значение.правило удаления.
Клиент имеет ограничение уникальности для атрибута id, и контекст всегда использует NSMergePolicyType.overwriteMergePolicyType.
Когда создается новый клиент NSManagedObject, контекст сохраняется, а клиентПри обнаружении того же идентификатора новый Клиент перезаписывает старый с одним большим предупреждением - по неизвестной причине старые объекты Address сохраняются, теперь связанные с новым Клиентом.Это приводит к созданию новой копии каждого адреса каждый раз, когда кэш / база данных перезагружается.
У меня есть несколько сущностей, которые имеют такие же отношения и уникальность, что приводят к одному и тому же результату - дубликаты множества экземпляров объекта.
Для такого объекта, как Address, нет ни одного атрибута, который мог бы инкапсулировать уникальность среди всех других объектов Address в контейнере.Это должна быть сумма всех атрибутов (адрес1, адрес2, город, штат, почтовый индекс и т. Д.), Которые проверяются на уникальность в сравнении с суммой всех атрибутов другого адреса.Поэтому я не уверен, как это сделать с помощью ограничений уникальности - насколько я могу судить, ограничения уникальности не могут быть расширены с помощью логики if.
Другим решением было бы изменение поведения политики слияния,или создайте пользовательскую политику слияния, чтобы убедиться, что она фактически удаляет старый объект (каскадируется вплоть до многих объектов отношений), прежде чем заменять его новым объектом.
Я недостаточно знаком с CoreData илиЦель-c - следовать всему, что я смог найти по этому вопросу.
Есть ли у кого-нибудь предложения о том, как: A. расширить возможности ограничений уникальности, B. определить поведение политики слияния или C.в противном случае предотвратить дублирование вышеупомянутых адресных объектов?
edit:
Я подозреваю, что мои предположения об ограничениях уникальности неверны - см. мой отдельный вопрос об этом здесь