Извлечение основных данных Почему управляемый объект не извлекается с использованием контекста B после его вставки в контекст A и сохранения контекста A?

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

У меня есть два nsmanagedobjectcontexts. Я назову их А и Б.

  1. Я вставляю новую сущность E в A
  2. я сохраняю А
  3. из B я пытаюсь получить все объекты E, найденные в магазине, с помощью простого fetchRequest
  4. При выполнении NSFetchRequest для получения всех объектов E из B я не могу получить тот, который я вставил в A, даже если A был сохранен.
  5. Я могу получить E, если выполню NSFetchRequest против A.

Я думал, что как только я сохраню контекст, ManagedObject в этом контексте будет сохранен в постоянном хранилище (у меня есть только одна настройка постоянного хранилища). Итак, я подумал, что могу получить управляемый объект E из любого контекста, который мне нужен, поскольку любой NSFetchedRequest извлекается из постоянного хранилища в контекст, в котором я его выполняю.

Что мне здесь не хватает? Почему я не могу получить E из любого контекста, который я хочу, после сохранения контекста A, в который E был вставлен в первую очередь?


person zumzum    schedule 31.03.2012    source источник


Ответы (1)


Вам необходимо объединить изменения из контекста A в контекст B или создать экземпляр контекста B после сохранения контекста A.

Взгляните на документацию для mergeChangesFromContextDidSaveNotification в NSManagedObjectContext.

person ImHuntingWabbits    schedule 31.03.2012
comment
Я понимаю. Это решило проблему. Итак, главный вопрос обо всем этом: если сохранение контекста делает так, что изменения в этом контексте сохраняются в фактическом постоянном хранилище... почему любой другой контекст не видит эти изменения при выборке из любого другого контекста? Я ошибаюсь, говоря, что сохранение контекста сохраняет изменения на диске? если я не ошибаюсь, почему любой другой контекст не может видеть эти постоянные изменения во время выборки? Я думал, что любой контекст постоянно смотрит на постоянное хранилище... Спасибо. - person zumzum; 31.03.2012
comment
NSManagedObjectContext — это представление хранилища в памяти, поскольку данные, загружаемые в контекст, эффективно кэшируются в памяти и, следовательно, устаревают, если вы сохраняете их из отдельного контекста. Изменения записываются на диск при каждом вызове -save:, однако они не будут видны в контекстах, которые уже загрузили объекты с диска, пока они не будут объединены или вы не вызовете -reset для контекста. - person ImHuntingWabbits; 02.04.2012
comment
Здорово. Это было мое непонимание тогда. Теперь понятно, почему регистрация на уведомление решила проблему. Спасибо - person zumzum; 02.04.2012