2014-01-29 2 views
0

Я использую Core Data для своего приложения и обновляюсь много раз (10-11 раз), но теперь пользователи жалуются на утраченные данные, хранящиеся в базе данных данных после приложения до градации.Первичная передача данных ядра. Можем ли мы иметь мультированные файлы .xcmappingmodel в xcode?

Раньше, после выпуска новой сборки, я создаю новую версию модели из старой и работаю над той же моделью и при необходимости меняю ее. Перед выпуском я обновляю модель .xcmappingmodel.

Теперь я готов к следующему выпуску и у меня есть несколько вопросов, на мой взгляд: -

1) Можно ли иметь несколько .xcmappingmodel файлы в Xcode?
2) Нужно ли выполнять вручную для передачи данных с модели на модель. Пример: - версия модели от 1.0 до 1.1, 1.1 до 1.2, 1.2 до 1.3 и скоро.

Предположим, что пользователь приложения не обновлялся и не работал над старой версией приложения (скажем, 1.0), и теперь я готов к выпуску 3.0. Нужно ли предоставлять функциональность для пошаговой миграции?

пример: - от 1.0 до 1.1, 1.1 до 1.2 и вскоре до 3.0 или его база данных будет автоматически обновляться до новой версии с сохранением ранее сохраненных данных.

Любые советы о том, как подойти к этому сценарию, будут очень оценены.

Заранее спасибо.

ответ

1

Да, вы можете не только использовать несколько моделей сопоставления для каждого шага в версиях модели данных. Итак, один от 1.0 до 1.1. и один для 1.1 до 1.2

Таким образом, координатор магазина может обновить старую модель 1.0 до, например, новой модели 3.0. Вы должны сообщить координатору магазина о необходимости обновления. Это называется миграцией.

смотри, например: https://developer.apple.com/library/ios/documentation/cocoa/reference/CoreDataFramework/Classes/NSPersistentStoreCoordinator_Class/NSPersistentStoreCoordinator.html#//apple_ref/occ/instm/NSPersistentStoreCoordinator/addPersistentStoreWithType:configuration:URL:options:error:

Более подробную информацию о миграции CoreData https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/CoreDataVersioning/Articles/Introduction.html

+0

Вы имеете в виду, что вам нужна модель сопоставления для каждой версии модели данных? – iGW

+0

Да. Но координатор магазина также может выполнять миграцию без модели, если изменения между моделями были незначительными. Некоторые типы изменений могут быть выведены из описания модели автоматически. См. Вторую ссылку выше. – Volker

+0

В этом случае у нас будет неопределенный номер. моделей отображения в xocde. Процесс миграции автоматически обрабатывается на заднем плане? предположим, что пользователь приложения в настоящее время имеет версию 1.0, а после обновления до 3.0 - это перенос основных данных, будет выполняться автоматически только с использованием моделей и версий карт? – iGW

2

Основные данные автоматически не поддерживает прогрессивную миграцию, когда у вас есть несколько моделей. Например, у вас есть версии моделей 1, 2 и 3. Приложение создало постоянное хранилище с использованием версии 1. Более новая версия приложения была установлена ​​с версией 3 модели. Core Data не будет автоматически последовательно обновлять хранилище с версии 1 до версии 2 до версии 3. Ни при использовании облегченной миграции, ни при нормальной, тяжелой миграции.

Самый легкий вид миграции - это, конечно, легкая миграция. Вы должны попытаться использовать его, пока не сможете по какой-то причине. Это намного быстрее и значительно проще в памяти.

При выполнении облегченной миграции Core Data должен вывести модель сопоставления из модели, которая была использована для создания магазина, который открывается для модели, которая в настоящее время используется в приложении. В нашем примере это означает, что необходимо вывести модель отображения от версии 1 до версии 2, от 1 до 3 и от 2 до 3.

Если по какой-либо причине облегченная миграция не может быть использована и вы создаете модели сопоставления и используете диспетчер миграции, он по-прежнему не будет автоматически прогрессировать для вас.Таким образом, у вас есть модели сопоставления от 1 до 2 и от 2 до 3. Приложение запускается, хранилище было создано ранее с использованием версии 1, а текущая версия - версия 3. Вам нужно указать модель диспетчера миграции 1, модель 3, а модель отображения от 1 до 3.

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

Вы можете найти хороший пример того, как это сделать в книге Core Data Marcus Zarra.