Переименование атрибутов облегченной миграции основных данных

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

Я успешно выполнил облегченную миграцию, переименовав атрибут "LastName" в исходной модели в "Lastname" в целевой модели. Я сделал шаг за шагом, чтобы добиться этого, и это работает, за исключением того факта, что все предыдущие данные в столбце "Фамилия" теперь потеряны. Новый переименованный атрибут существует, я могу вставить новые сущности, и значения новых вставленных сущностей в порядке. Проблема касается старых данных и старого атрибута. Как сказано в документации Apple, я поместил переименовывающий идентификатор нового переименованного атрибута в целевой модели в имя старого атрибута в исходной модели с помощью интерфейса XCode или кода, и ни один из них не работает. Мои данные по переименованному атрибуту всегда теряются.

Это ожидаемое или что-то упущенное?

Thnxs,

1 ответ

У меня недавно была та же проблема, когда даже с идентификатором переименования данные терялись между версиями моей модели. Модель переходила с версии 10 на 15 (с изменениями, происходящими между версиями 11 и 12), поэтому идентификатор переименования не вынимался, даже когда я включил его в более поздние версии. У меня также была проблема, как бороться с последующими изменениями атрибута.

В конце я добавил следующий код в середину метода persistentStoreCoordinator в делегате приложения (который является частью кода Apple-заполнителя при настройке нового проекта с добавлением Core Data) перед тем, как подключить постоянное хранилище к координатору постоянного хранилища. выполнить облегченную миграцию:

NSEntityDescription *entity = [[[self managedObjectModel] entitiesByName] objectForKey:@"EntityName"];
NSPropertyDescription *property = [[entity attributesByName] objectForKey:@"NewAttributeName"];
[property setRenamingIdentifier:@"OldAttributeName"];

Затем я применил этот вопрос к Stackru ( CoreData, как определить новую версию приложения, чтобы я мог обновить модель?), Где описывается, как хранить CFBundleVersion вместе с постоянным хранилищем. Таким образом, если вы обновите имя атрибута еще раз, вы сможете проверить текущую версию постоянного хранилища и узнать последнюю версию хранилища, чтобы вы могли выбрать правильный идентификатор переименования на лету.

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