CoreData Миграция необязательного отношения к не факультативному

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

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

Итак, я думаю, мне нужно написать какой-то код где-нибудь, который создает новый управляемый объект для заполнения отношения, если он равен нулю в старой базе данных. Я полагаю, что это может означать подклассификацию NSMigrationPolicy, но все примеры, которые я нахожу в Интернете, показывают, как переносить атрибуты, но не отношения.

Итак, мой вопрос таков: Как создать NSManagedObject во время миграции, чтобы заполнить отношения, которые пошли от необязательного к необязательному?

Ответ 1

Я считаю, что самый простой способ сделать это - создать отдельный script, который читается из старого хранилища Core Data и записывается на новый, создавая любые необходимые объекты "на лету" по мере необходимости.

Ответ 2

Интересный вопрос. Теперь у меня нет готового ответа, но я бы начал с переопределения - (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)sInstance entityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error

Кажется, что это будет точка, в которой вы могли бы определить, имеет ли данный экземпляр (NSManagedObject *) sInstance пустое отношение, и если да, заполните его.