Основное приложение на основе документов с глобальным постоянным хранилищем - PullRequest
5 голосов
/ 18 ноября 2010

У меня есть основанное на документе приложение Core Data, которое работает как есть.Я хотел бы добавить поддержку глобального постоянного хранилища для хранения библиотеки элементов.

Я прочитал большинство соответствующих документов и понимаю, что мне следует использовать конфигурации в моделях управляемых объектов.Я определил две конфигурации: «DocumentConfiguration» и «LibraryConfiguration».Объекты в конфигурации документа находятся только в конфигурации документа, а объекты в конфигурации библиотеки находятся только в конфигурации библиотеки - т. Е. Не перекрываются.

Документы затем говорят: «Затем вы используете эту модель, когдаВы создаете координатор ".Но на самом деле я не создаю свой собственный постоянный координатор хранилища, поскольку я использую стандартный координатор NSPersistentDocument.

Несколько вопросов о том, как лучше поступить, и помогите устранить любые недоразумения, которые могут у меня возникнуть:

A.Получу ли я NSPersistentStoreCoordinator в NSPersistentDocument, а затем добавлю в него новое постоянное хранилище в соответствии с:

NSPersistentStoreCoordinator * coordinator = [[myDocument managedObjectContext] persistentStoreCoordinator];
[coordinator addPersistentStoreWithType:NSXMLStoreType 
    configuration:@"LibraryConfiguration" 
    URL:url 
    options:nil 
    error:&error];

Я думаю, что это может быть проблемой, поскольку я не предоставил другую конфигурациюопределение («DocumentConfiguration») в координаторе постоянного хранилища NSPersistentDocument, поскольку я использую значение по умолчанию, предоставленное NSPersistentDocument.Я предполагаю, что он, вероятно, будет использовать ноль, когда придет время сохранить документ.И если так, это будет проблемой?Т.е. как координатор узнает, какое постоянное хранилище сохранить объект с данным определением конфигурации, если одинаковые конфигурации не определены для всех постоянных хранилищ (в данном случае два)?Могу ли я установить конфигурацию («DocumentConfiguration») постоянного хранилища NSPersistentDocument до его создания / сохранения?Из документов NSPersistentDocument:

Сохранение нового документа добавляет хранилище типа по умолчанию с выбранным URL-адресом и вызывает save: в контексте.Для существующего документа сохранение просто вызывает save: в контексте.

B.Было бы лучше создать мои собственные экземпляры NSPersistentStoreCoordinator и NSManagedObjectContext, добавив два постоянных хранилища с определенными конфигурациями, а затем заставить NSPersistentDocument использовать эти экземпляры NSPersistentStoreCoordinator и NSManagedObjectContext и освободить старые?Если это так, как бы я указать URL-адрес для NSPersistentDocument для метода addPersistentStoreWithType: ...?Кажется, этот URL известен только после сохранения документа без названия.(При проверке этого, по-видимому, нет никакого временного постоянного хранилища (с помощью метода persistentStores в координаторе постоянного хранилища), пока документ не будет сохранен в первый раз).

C.Или было бы лучше оставить NSPersistentDocument в покое и создать свой собственный экземпляр NSPersistentStoreCoordinator, который я использую исключительно для постоянного хранилища библиотек и объектной модели управляемой библиотеки?В документах сказано, что несколько экземпляров NSPersistentStoreCoordinator должны использоваться в многопоточных приложениях Core Data, но мне не требуется поддержка многопоточных Core Data.Желательно ли иметь два экземпляра NSPersistentStoreCoordinator - один для библиотеки и один для документов (интуиция говорит, что это не обязательно и, возможно, не правильный подход)?

Есть предложения?

Ответы [ 2 ]

1 голос
/ 14 декабря 2010

Решение, которое я использовал, которое работает хорошо, основано на C) выше.Я оставляю NSPersistentDocument и его координатор постоянного хранилища в одиночестве и вместо этого создаю свой собственный экземпляр NSPersistentStoreCoordinator, который я использую исключительно для постоянного хранилища библиотеки (глобального хранилища).

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

0 голосов
/ 18 ноября 2010

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

Распространенной ошибкой здесь является забывание о том, что постоянный координатор хранилища может иметь произвольное количество постоянных хранилищ. Все, что вам нужно сделать, это продублировать шаблон Apple, чтобы создать два постоянных магазина с разными именами и / или местоположениями, и каждый с другим именем конфигурации. Затем добавьте оба к постоянному координатору магазина.

И все готово. Экземпляры сущностей для каждой конфигурации будут помещены в нужное хранилище.

...