Перенос основных данных — это простая миграция, как это должно быть сделано?

#iphone #ios #ipad #core-data #data-migration

#iPhone #iOS #iPad #core-data #данные-миграция

Вопрос:

Что я делаю:

Я довольно новичок в Core Data, и я понял, что мое текущее использование его в моем приложении далеко от хорошего. В принципе, у меня есть объект с примерно четырьмя различными строковыми свойствами. Каждый раз, когда я работаю с базой данных, я просто передаю массивы с каждой из четырех строк.

Теперь я хочу добавить дополнительные свойства к этому объекту. Было бы также здорово, если бы я мог добавлять методы к этому объекту, чтобы сэкономить много повторений всякий раз, когда я использую базу данных в разных классах.

Итак, я решил, что лучший способ (и, вероятно, как я должен был сделать это изначально) — использовать Xcode для создания класса для этой сущности — в Интернете есть множество руководств для этого. Таким образом, я мог бы просто передавать экземпляры этого класса — намного чище, чем при использовании массивов!


Где я застрял:

Есть ли простой способ перейти от моей текущей модели основных данных к модели с добавленными свойствами и соответствующим классом? Я также хочу разделить одну из существующих строк на две по мере миграции (имя в имя фамилия).

Должен ли я использовать встроенные инструменты миграции? Или я должен просто создать новую модель базы данных полностью с нуля и создать пользовательский класс, который проверяет старую базу данных, преобразует каждый объект и сохраняет его в более новой? Каков был бы наилучший способ сделать это — поскольку я новичок в базах данных / основных данных, я не хочу начинать просто с того, чтобы узнать, что есть более простой или лучший способ сделать это.

Ответ №1:

Вам необходимо создать пакет управляемой объектной модели и включить миграцию. По сути, это позволяет загружать более одной модели базы данных для извлечения данных одного и того же типа. Затем вы можете указать контексту управляемого объекта скопировать все заново. Для получения дополнительной информации: http://www.timisted.net/blog/archive/core-data-migration /.

Комментарии:

1. Спасибо, это сообщение в блоге — золотая жила — я искал что-то подобное, но не смог его найти. Приветствия

Ответ №2:

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

Выполните следующие действия:
1. В Xcode нажмите на свою модель. у него должно быть расширение .xcdatamodeld . 2. Перейдите в Редактор-> Версия модели и добавьте новую модель, позаботившись об изменении версии. 3. Добавьте новые атрибуты. 4. Убедитесь, что вы добавили новые атрибуты в соответствующие подклассы управляемых объектов. 5. в вашей постоянной реализации координатора хранилища, скорее всего, в вашем делегате приложения. Убедитесь, что вы добавили опцию NSMigratePersistentStoresAutomaticallyOption. Ваш код должен выглядеть примерно так:

 NSPersistentStoreCoordinator *psc=persistentStoreCoordinator;
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                              [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                             [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,nil];
    NSError *error=nil;
    if (![psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:amp;error]) {
            // handle errors
    }
  

Вот документы Apple по облегченной миграции
http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmLightweight.html

Удачи 1