Вот несколько примеров:
Если вы планируете использовать разные комбинации сущностей в разных магазинах, вам необходимо добавить «конфигурации» в вашу MOM.Для получения дополнительной информации см. Руководство по программированию основных данных> Модели управляемых объектов.
Обычное место для хранения фактической базы данных находится в «каталоге поддержки приложений», который находится в Пользователь> Библиотека> Поддержка приложений> NameOfYourApp.Строка, представляющая этот путь, - это то, что возвращает автоматически сгенерированный метод applicationSupportDirectory
.(К сожалению, вы спрашиваете об iOS. Там метод applicationDocumentsDirectory
возвращает путь к песочнице.)
Автоматически сгенерированный метод доступа persistentStoreCoordinator
- это то место, куда добавляется хранилище.Вы можете сделать его разные версии, чтобы добавить разные хранилища, или добавить свойство к делегату приложения, которое вы используете, чтобы отслеживать, с каким хранилищем работать.Например, вместо создания URL-адреса, указывающего на файл сохраненных данных по умолчанию, вы можете сделать следующее:
NSURL *url = [NSURL fileURLWithPath: [applicationSupportDirectory stringByAppendingPathComponent: @“nameOfStoreToAdd.sqlite”]];
В вызове addPersistentStoreWithType
вы захотите использовать NSSQLiteStoreType
, а нечем по умолчанию NSXMLStoreType
.(Если вы когда-нибудь получите NSUnderlyingException = «Файл по пути, по-видимому, не является базой данных SQLite.», Это проблема.) И если вы настроили различные конфигурации для MOM, вы захотите добавить строкучтобы определить configuration
для этого хранилища. Позже вы можете посмотреть, как настроить словарь опций для параметра options
.
Автоматически сгенерированный managedObjectContext
- это то, что вызывает метод доступа persistentStoreCoordinator.опять же, вам понадобятся разные версии этого или некоторого свойства, с которым обращаются, чтобы управлять тем, как вызывается метод доступа storeCoordinator.
Когда вы хотите переключить базы данных, вы сначала сохраняете текущий контекст, устанавливаете его иstoreCoordinator, равный nil, затем вызовите метод доступа к контексту таким образом, чтобы получить другое хранилище (или, возможно, вы можете оставить несколько контекстов открытыми одновременно. Просто убедитесь, что вы установили отдельные свойства для их хранения и их storeCoordinators.)
Делегат приложения доступен из любой части.вашего приложения, просто вызвав [[NSApplication sharedApplication] delegate]
, поэтому имеет смысл оставить этот код там.Если это становится слишком длинным, вы всегда можете разбить его на категорию.
Я не эксперт, поэтому кое-что из этого может быть немного шатким, но как только вы начнете, у вас, вероятно, будетЛучшая идея, где искать более подробную помощь.