Как выполнить миграцию модели CoreData * только *, чтобы добавить ограничения - PullRequest
1 голос
/ 23 мая 2019

У меня довольно большая база данных CoreData с большим количеством дубликатов, и мне нужно добавить ограничения, чтобы избежать дубликатов в будущем.

Следовательно, мне нужно перенести существующую модель в модель с ограничениями с потенциалом (или, скорее, определенно) потеря некоторых дубликатов.

Желательно, чтобы я мог контролировать процесс удаления дубликатов с помощью обратного вызова или чего-то еще.

В худшем случае у меня, вероятно, было бы 2MOC и копировать данные один за другим в другой, но каков будет хороший подход к такой миграции?

Теперь я получаю Domain=NSCocoaErrorDomain Code=134110 "An error occurred during persistent store migration." UserInfo={sourceURL=<...>, reason=Cannot migrate store in-place: constraint violation during attempted migration,

PS Я понимаю, что мой вопроспохожи на те, что ниже, но они не получили ответа.Я также попробовал облегченную миграцию, и она провалилась аналогичным образом. Базовые данные: изменения ограничений, необходимые для миграции Проблемы при упрощенной миграции базовых данных

1 Ответ

1 голос
/ 23 мая 2019

Ну, вы как-то не заметили фактический заголовок, когда назвали этот вопрос.Добавление ограничений действительно тривиально.Тем не менее, ваше другое требование, удаление существующих дубликатов, на самом деле тяжелее.Для этого вам нужно выполнить Heavyweight Migration :)

Я потратил несколько минут в поисках хорошего учебника по Heavyweight Migration, но до сих пор нашел только посты в блогах, в которых упоминание о нем попутночего следует избегать, потому что это трудно.Я сделал тяжелые миграции и не согласен с тем, что это сложно.Это на самом деле довольно просто.

Для начала откройте свой проект в XCode и создайте новую версию модели данных, клонируя текущую модель данных, а затем добавляя свои ограничения.Этот шаг такой же, как если бы вы делали облегченную миграцию.Затем щелкните в меню: Файл > Новый , затем прокрутите вниз до Базовые данные и выберите Модель отображения .Это, конечно, NSMappingModel, упомянутый в том документе Apple, на который я ссылался.При включении в цель вашего приложения он добавит файл .cdm в Ресурсы вашего приложения.Будет также написать код - подкласс NSMigrationPolicy.Это будет обратный вызов или что-то, что вы ищете.Дайте нам знать, если вам нужна помощь с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...