2015-04-13 2 views
0

В настоящее время у меня есть приложение, отправленное в App Store. Я хочу включить заполненную базу данных в следующую версию (я скопирую файл .sqlite в основной пакет), но некоторые данные нужно будет загружать, в зависимости от местоположения. Модель данных следующей версии имеет значительные изменения. Кроме того, следующие версии также будут иметь изменения в модели данных. Что я делаю?Основные данные Перенос данных и отправка файла базы данных

Нужно ли мне заботиться о миграции, если я отправляю БД? Если я проверяю, существует ли файл DB, а если нет, скопируйте его из основного пакета - это не повлияет на текущих пользователей, но если я не буду проверять - он будет заменяться каждый раз, когда пользователь запускает приложение. Мне все еще не ясно, как бороться со следующими версиями. Я предполагаю, что мне нужно сохранить отгруженную БД, названную одинаково от версии к версии, но это приведет к потере данных при обновлении.

ответ

0

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

double version = [self getDatabaseMigrationVersion]; 

    if(version < 1.1) 
    { 
    //1.0 -> 1.1 SQL migration 
    version = 1.1; 
    [self setDatabaseMigrationVersion:version]; 
    } 

    if(version < 1.2) 
    { 
    //1.1 -> 1.2 SQL migration 
    version = 1.2; 
    [self setDatabaseMigrationVersion:version]; 
    } 

    //... 

Важно помнить, что обновления приложения не равномерно распределены среди пользователей, и поэтому вы абсолютно не думайте, что все выполнили все соответствующие миграции. Вы застряли, поддерживая последовательность инкрементных шагов. Например, даже если вы в 1.4 после 1.3, 1.2 и 1.1, у вас, вероятно, все еще есть пользователи с 1.0 и т. Д., Поэтому вы не можете отказаться от каких-либо промежуточных шагов.

Очевидно, что есть несколько библиотек, которые помогают управлять миграциями SQLite на iOS. Я не связываюсь с ними, потому что я их не рассматривал. Я сомневаюсь, что они намного больше, чем простые обертки вокруг процесса, о котором я говорил выше.

Смежные вопросы