Основные данные выполняют действие после облегченной миграции
У меня есть приложение, которое выполняет некоторую облегченную миграцию при обновлении модели данных ядра.
Однако я хочу выполнить некоторые конкретные действия после того, как миграция произошла как разовая операция.
Например, у меня есть два NSManagedObjects... Document и DocumentLayout. На данный момент нет никакой связи между Document и DocumentLayout, за исключением того, что приложение ищет "documentName", совпадающее с "layoutName" в соответствующих объектах.
Это неэффективно, поэтому я хочу создать настоящие отношения между ядром и данными между ними, а затем, после миграции, связать два объекта, выполняя итерацию и создавая отношения.
Я посмотрел на код, такой как...
NSManagedObjectModel *destinationModel = [persistentStoreCoordinator managedObjectModel];
BOOL pscCompatibile = [destinationModel isConfiguration:nil compatibleWithStoreMetadata:sourceMetadata];
... чтобы проверить, требуется ли миграция, и выполнить соответствующую работу, но мне нужно, чтобы это была одноразовая операция, поскольку в течение жизненного цикла приложения могут храниться документы в Document, которые не требуют связи с DocumentLayout и, следовательно, если эта операция выполняется каждый раз, когда производится обновление модели данных, будет создана связь, которая не является требуемой.
Итак, я мог бы взглянуть (скажем) на флаг versionNumber в приложении, которое обнаруживает это и запускает операцию только один раз и предотвращает ее выполнение каждый раз, но это кажется не элегантным и подверженным ошибкам.
Итак, есть ли способ запустить операцию один раз после определенной миграции, а затем никогда не запускать снова?
1 ответ
Это действительно хороший вопрос, который я потратил много времени, пытаясь выяснить. Лучший ответ, который я нашел до сих пор, может быть найден в этой статье от ObjC.io (я не имею никакого отношения к ним).
Извиняюсь за простую публикацию ссылки, но я думаю, что ответ намного сложнее, чем просто несколько строк кода.