перенести / обновить основные данные приложения без удаления пользовательских данных! - PullRequest
4 голосов
/ 01 мая 2010

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

Итак, у меня есть приложение coredata для iphone (очень похожее на приложение рецептов), которое использует предварительно заполненную базу данных sql. Пользователь может добавлять / редактировать свои собственные данные, но данные по умолчанию не могут быть удалены. Все данные пользователя хранятся в одной и той же базе данных SQL.

ВОПРОС: что мне нужно сделать, чтобы: - обновить некоторые (не все) данные по умолчанию, которые хранятся в базе данных sql, не «касаясь» данных пользователя? (модель останется прежней - никаких новых объектов и т. д.) (если пользователь удалит приложение, а затем переустановит новую версию, все будет хорошо, но я не хочу этого делать, очевидно).

Может кто-нибудь ПОЖАЛУЙСТА помочь в уровне кодирования?

Ответы [ 3 ]

2 голосов
/ 09 мая 2010

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

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmLightweight.html#//apple_ref/doc/uid/TP40008426-SW1

По сути, вы создаете новую версию своей модели данных с помощью пункта меню Design->Data Model в XCode, а затем вносите несколько изменений кода. Это заставит Core Data автоматически перенести более старую модель на более новую. Вы ограничены в том, какие изменения вы можете сделать. Вы можете добавить новые сущности и либо добавить необязательный атрибут к существующим сущностям, либо обязательные атрибуты с установленными значениями по умолчанию.

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

NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];

Как только вы начнете использовать управление версиями и миграцию, это должно измениться на что-то вроде этого:

NSString *path = [[NSBundle bundleForClass:self.class] pathForResource:@"DataModelName"
                                                                ofType:@"momd"];
NSURL *url = [NSURL fileURLWithPath:path];
NSManagedObjectModel *model = [[[NSManagedObjectModel alloc] initWithContentsOfURL:url] autorelease];
1 голос
/ 01 мая 2010

Базовые данные явно поддерживают управление версиями модели и предоставляют средства для миграции ваших данных между версиями. Это должно содержать информацию, которая вам нужна. Ссылка на документы разработчика для миграции

0 голосов
/ 01 мая 2010

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

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