#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