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

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

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

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

1 ответ

Решение

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

У Person один адрес, поэтому есть отношение "один к одному" между Person и Address, которое называется "homeAddress". От адреса к человеку есть обратное отношение ко многим, потому что многие люди могут жить по одному адресу.

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

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

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

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

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

Другие вопросы по тегам