Миграция из словаря в объект основных данных

StackOverflow https://stackoverflow.com/questions/4001105

  •  25-09-2019
  •  | 
  •  

Вопрос

У меня есть модель данных, где есть объект Person, который имеет преобразуемый атрибут, представляющий собой массив словарей, содержащих информацию.Модель намного больше этой, это как раз та часть, с которой у меня возникли проблемы.Он был разработан таким образом старым разработчиком, и, принимая участие в проекте, мне нужно перенести его на 100% core data.

Итак, что мне нужно сделать, это создать новую сущность, затем просмотреть каждый словарь в массиве Person и создать новые экземпляры этой сущности с информацией из этого словаря.Я думал, что мог бы использовать NSEntityMigrationPolicy для настройки пользовательской миграции для этого нового объекта, но, похоже, основная миграция данных ожидает, что X количество исходных объектов будет преобразовано в X количество целевых объектов.Поскольку технически у меня сейчас есть 0 исходных объектов (поскольку они находятся в массиве, о котором Core Data на самом деле ничего не знает), я не уверен, как я могу заставить миграцию создавать новые объекты во время процесса.

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

Это было полезно?

Решение

Это помогло бы получить представление о вашей модели данных (schema), но давайте предположим, что ваш персональный объект теперь содержит домашний адрес и список любимых ресторанов.И давайте далее предположим, что вы будете создавать новые объекты Address и Restaurant вместе со следующими отношениями:

У человека есть один адрес, поэтому существует отношение "к одному" от Человека к адресу, называемое "Домашний адрес".Существует обратная связь "ко многим" от Адреса к Человеку, потому что многие люди могут жить по одному и тому же адресу.

Человек имеет отношение "ко многим" (называемое "рестораны") к ресторанам.Ресторан также может иметь отношение "ко многим" к Человеку (хотя это может быть одним из тех случаев, когда двунаправленность на самом деле не имеет смысла).

В любом случае, дело в том, что теперь - в дополнение к вашему подклассу PersonToPerson NSEntityMigrationPolicy, у вас также будут PersonToAddress и PersonToRestaurant.Это будут места, куда вы распаковываете старые данные и используете их для создания экземпляра и инициализации новых объектов Address и Restaurant.

Конечно, есть много других усложняющих вопросов.Например, вам не захочется создавать новый экземпляр одного и того же Ресторана для каждого Человека, которому он нравится.Вам нужно будет следить за вновь созданными Ресторанами.

Вам захочется упорядочить свои сопоставления стратегически - возможно, сначала с помощью PersonToPerson.

Возможно, вы захотите ознакомиться с Основными данными Маркуса Зарры пример кода и, может быть, даже куплю его книгу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top