2012-01-16 2 views
2

Я создал приложение, которое использует Core Data для хранения информации. Сегодня я сделал пару изменений в модели данных и воссоздал файлы кода, для которых я изменил модели данных. Когда я снова попробовал запустить приложение на своем iPad, он пожаловался, что между хранилищем данных в настоящее время на iPad есть столкновение, и тот, к которому я пытаюсь получить доступ (я добавил одно поле к одному из объектов). Я решил эту проблему, полностью удалив приложение с моего iPad и заменив его на новую версию.Цель C - Модернизация NSManagedObject

Мне просто интересно, каковы будут последствия для пользователей, которые в настоящее время используют приложение, когда я выпущу обновление? Они также потеряют все свои данные? Будут ли они сталкиваться с этим уродливым сообщением об ошибке или сбой? Или Core Data волшебным образом обновляет хранилище данных для меня?

С уважением, EZFrag

ответ

4

Смотрите Руководство компании Apple Core Data Migration по адресу: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/Introduction.html.

«Вы можете открыть хранилище основных данных только с использованием модели управляемого объекта, используемой для ее создания. Поэтому изменение модели несовместимо с (и таким образом неспособным открыть) ранее созданные хранилища. Если вы измените свою модель , поэтому вам необходимо изменить данные в существующих хранилищах на новую версию, изменяя формат хранилища, известный как миграция.

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

+0

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

-1

Для развития вам необходимо удалить его со своего устройства или тренажера.
Для развертывания вам нужно пройти довольно несчастный процесс! Он описан в документации, но в основном вам нужно создать другую версию своего хранилища данных и перенести свои данные (если у вас есть что-то, что вам нужно перевести) в новую версию. Если вам не нужно переносить данные, ваша жизнь будет проще.

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

Смотреть это http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/Introduction.html

+0

Я не согласен с тем, что это несчастная ситуация. Каждый раз, когда вы меняете модель данных в ЛЮБОЙ структуре, вы должен быть мигрировать. Это то, как все работает. Основные данные делают очень легко для 90% случаев миграции. –

+0

В Coredata может быть проще по сравнению с другими фреймворками, но для меня это все еще «несчастливо». Я признаю, что я не должен говорить что-то субъективное, но я поддерживаю его. – Ali