Переопределить Coredata DB с новой структурой DB - PullRequest
1 голос
/ 18 марта 2011

Хорошо, ребята, я надеюсь, вы поможете мне с этим. Мне действительно нужна твоя помощь.

У меня есть приложение в магазине приложений, которое использует начальную базу данных (проверьте, существует ли база данных в методе «persistentStoreCoordinator» в делегате приложения, если не существует, скопируйте исходную базу данных).

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

Интересно, как я могу преодолеть эту проблему. проблема в том, что я не могу просто заменить существующую базу данных, потому что тогда я не смогу скопировать начальную базу данных.

Пожалуйста, помогите мне:)

Ответы [ 3 ]

2 голосов
/ 18 марта 2011

Почему вы меняете структуру БД, а не модель данных? Базовые данные не являются базой данных. Он предназначен для абстрагирования базы данных, чтобы вам не приходилось об этом думать. Если вам нужно напрямую управлять базой данных, вы должны использовать SQLite.

Базовые данные обеспечивают как автоматическую, так и ручную миграцию моделей, чтобы вы могли изменить свою модель данных и сделать так, чтобы Базовые данные заботились о БД. Серьезно, весь смысл Core Data в том, что вам никогда не приходится иметь дело с базой данных напрямую.

0 голосов
/ 18 марта 2011

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

я использовал этот код:

if(![[NSUserDefaults standardUserDefaults] boolForKey:@"firsttimer"] ) {
    if ([fileManager fileExistsAtPath:storePath]) {
        [fileManager removeItemAtPath:storePath error:nil];
    }
    [[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"firsttimer"];
}
0 голосов
/ 18 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...