Множественные контексты для какао-приложения на основе документов?

Итак, я создаю приложение на основе документов в Какао и пытаюсь понять NSManagedObjectContext. Я прочитал «Основы основных данных» Apple, но не могу осмыслить его. В своем приложении я создал собственный класс CoreDataUtility, чтобы все мои классы могли получить контекст с помощью следующих строк кода:

MyCoreDataUtility *coreData = [MyCoreDataUtility sharedCoreDataUtility];
NSManagedObjectContext *context = [coreData context];

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

Итак, мои вопросы:

  1. У меня есть предположение, что каждый раз, когда я создаю новое окно, создается новый контекст, это правильно?
  2. Если создается новый контекст, и они разные (я фактически распечатал адреса памяти двух контекстов, и их адреса разные), имеет ли это какое-то отношение к постоянному координатору хранилища или постоянному хранилищу объектов (обе эти концепции также являются туманно в моей голове)?
  3. Если все документы относятся к одному и тому же контексту, я отвечаю за создание нового контекста каждый раз, когда создается документ?

Спасибо всем!


person schmudu    schedule 08.08.2012    source источник


Ответы (1)


У меня есть предположение, что каждый раз, когда я создаю новое окно, создается новый контекст, это правильно?

Нет и да. Создание нового окна не создает новый контекст, но я полагаю, что то, что вы видите как «новое окно», на самом деле является вашим действием по «созданию нового документа». В приложении на основе документов с CoreDate у вас, вероятно, будет постоянное хранилище, которое создает новый контекст для каждого документа отдельно.

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

Если все документы относятся к одному и тому же контексту, я отвечаю за создание нового контекста каждый раз, когда создается документ?

Это невозможно. Один контекст может быть связан только с одним файлом (или «хранилищем»), поэтому каждый документ должен иметь «как минимум» один контекст. Если вы используете шаблон для приложения на основе CoreData и нескольких документов, вам не нужно беспокоиться о создании нового контекста. Как я уже сказал, об этом позаботится координатор магазина. Однако по мере того, как вы узнаете больше о CoreData, и особенно если вы выполняете многопоточность, вам придется создавать более одного контекста, потому что контекст не может пересекать потоки.

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

person SystematicFrank    schedule 09.08.2012
comment
Спасибо, Франциско ... извини, что упустил возможность ответить на эту тему. - person schmudu; 03.10.2012