Миграция из словаря в основной объект данных
У меня есть модель данных, в которой есть сущность Person, которая имеет трансформируемый атрибут, представляющий собой массив словарей, содержащих информацию. Модель гораздо больше, это та часть, с которой у меня проблемы. Он был разработан таким образом старым разработчиком, и при принятии проекта мне нужно перенести это на 100% базовые данные.
Поэтому мне нужно создать новую сущность, затем пройтись по каждому словарю в массиве Person и создать новые экземпляры этой сущности с информацией из этого словаря. Я подумал, что мог бы использовать NSEntityMigrationPolicy, чтобы настроить пользовательскую миграцию для этого нового объекта, но, похоже, миграция базовых данных ожидает, что количество исходных объектов преобразуется в число исходных объектов. Поскольку технически у меня сейчас 0 исходных сущностей (поскольку они находятся в массиве, о котором Core Data на самом деле ничего не знает), я не уверен, как я могу заставить миграцию создавать новые сущности во время процесса.
Что, или, скорее, где в процедуре миграции, лучший способ сделать то, что я пытаюсь сделать? В прошлом я всегда использовал облегченную миграцию, так что это мое первое приключение в пользовательской миграции.
1 ответ
Это поможет понять вашу модель данных (схему), но давайте предположим, что ваша сущность Person теперь содержит домашний адрес и список любимых ресторанов. И давайте далее предположим, что вы будете создавать новые объекты Address и Restaurant вместе со следующими отношениями:
У Person один адрес, поэтому есть отношение "один к одному" между Person и Address, которое называется "homeAddress". От адреса к человеку есть обратное отношение ко многим, потому что многие люди могут жить по одному адресу.
Человек имеет отношение ко многим (так называемые рестораны) к ресторанам. Ресторан также может иметь отношение ко многим людям (хотя это может быть одним из тех случаев, когда двунаправленность на самом деле не имеет смысла).
В любом случае, суть в том, что сейчас - в дополнение к вашему подклассу PersonToPerson NSEntityMigrationPolicy у вас также будут PersonToAddress и PersonToRestaurant. Это будут места, в которые вы распаковываете старые данные и используете их для создания и инициализации новых объектов Address и Restaurant.
Конечно, есть много других сложных вопросов. Например, вы не захотите создавать новый экземпляр одного и того же ресторана для каждого человека, которому он нравится. Вам нужно будет отслеживать недавно созданные рестораны.
Вы хотите заказать стратегические сопоставления - возможно, сначала с PersonToPerson.
Возможно, вы захотите взглянуть на пример кода Маркуса Зарры Core Data и, возможно, даже купить его книгу.