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

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

Теперь мне нужно изменить модель данных, чтобы реализовать некоторые новые функции. Изменения в модели данных будут радикальными, и я подумываю о переходе от UIManagedDocument к обычному базовому стеку данных. Я много читал о миграции основных данных и UIManagedDocument, но чтобы перейти от UIManagedDocument к обычному стеку CoreData, похоже, мне придется написать класс, который будет переносить данные? Мне просто интересно, какой лучший/самый безопасный способ сделать это.


person Shinigami    schedule 10.10.2013    source источник


Ответы (1)


Какие миграции вам нужны, зависит только от того, как изменится модель данных. Переход от стека, созданного UIManagedDocument, к стеку, созданному вами, не должен иметь значения с точки зрения переноса данных. Если бы было несколько документов, вам нужно было бы выяснить, как вы хотите это обработать, но если UIManagedDocument использовался исключительно для того, чтобы избежать написания стандартного кода установки стека, это не проблема.

Поскольку вы описываете изменения модели как «резкие», вам придется изучить настройку миграции. Возможно, вам просто нужна настраиваемая модель сопоставления, или вам может потребоваться полный настраиваемый код миграции. Это действительно зависит от деталей того, как меняется модель.

person Tom Harrington    schedule 10.10.2013
comment
Но миграция помогает только при переходе на новую модель. Мне все еще нужно будет переместить данные из стека UIManagedDocument в свой собственный, что в любом случае потребует моего собственного кода. Это правильно? Вот почему мне интересно, есть ли какая-либо польза от использования предоставленных инструментов миграции. - person Shinigami; 11.10.2013
comment
У вас должна быть возможность прямого доступа к базе данных UIManagedDocuments, если вы знаете ее URL-адрес. Обычно это находится во вложенной папке пакета UIManagedDocument, но это немного сложнее, если используется iCloud. Непонятно, почему вы не хотите использовать UIManagedDocument, это не усложнит (или упростит) миграцию вашей базы данных. Чтобы перенести файл базы данных в другое место, просто используйте NSPersistentStoreCoordinators migrationPersistentStore... - person Duncan Groenewald; 12.10.2013
comment
Кстати, приведенное выше поможет вам только сделать копию существующего хранилища данных. Чтобы преобразовать модель в новую модель, вам, возможно, придется создать новое хранилище, а затем запустить собственный код, чтобы считать данные из старого хранилища и скопировать их в новое хранилище. - person Duncan Groenewald; 12.10.2013