Базовые Данные выбирают сбои запроса с: 'NSInternalInconsistencyException', причина: 'оператор все еще активен'

Основное расположение приложения с помощью контроллера навигации обрабатывает по шаблону с базовой датой:

Делегат: persistenceCoordinator, managedObjectModel, managedObjectContext

  • RootView: managedObjectContext (от делегата), addManagedObjectContext (использование шаблона из шаблонов), fetchResultsController
    • Добавляйте/Редактируйте представление (иерархия для добавления Объекта A и его B)

У меня есть два объекта, A & B, которые совместно используют 1 к 1 отношения/обратная связь

Используя шаблон из шаблонов приложение:

  1. Создает addManagedObjectContext
  2. Вставляет объект
  3. Спешит Добавление/Редактирование представления (передававшего его вставленный объект),

ИСКЛЮЧЕНИЕ СТУПАЕТ 1:

Если я просто заполняю атрибуты и сохраняю все, хорошо работает.

  • Объект вставляется в базу данных (проверенный с sqlite3 на командной строке)
  • fetchResultsController обновляет представление списка
  • Я могу закрыть и открыть приложение (полный близкий/открытый не только переключатель приложения), и представление списка будет выборка ре правильно

Если я затем Редактирую A, я могу выбрать, Добавляют B, и добавить представление B спешится (и передается объект),

  • Заполните детали B и сохраните
  • B вставляется в A managedObjectContext, отношения установлены, и контекст сохраняется
  • Представление появляется прочь, и все появляется хорошо
  • Объекты находятся оба в базе данных с корректными отношениями
  • Я могу перезагрузить запись и видеть отношения, сделать редактирования и т.д.
  • ИСКЛЮЧЕНИЕ: Если я закроюсь/вновь открою приложение, чтобы инициировать выборку, то ошибка, упомянутая в заголовке, произойдет.

ИСКЛЮЧЕНИЕ СТУПАЕТ 2:

Если я заполняю, атрибуты И атрибуты B в начальной букве "добавляют"

  • Сохранение B инициировало полное сохранение контекста A (как выше)
  • Сохранение A сохраняет через отношения делегата, настроенные шаблоном (и объединяет результат в основной managedObjectContext и т.д.),
  • Объекты вставляются в базу данных правильно
  • Однако fetchResultsController НЕ обновляет для показа новых записей
  • ИСКЛЮЧЕНИЕ: Если я закроюсь/вновь открою приложение, чтобы инициировать выборку, то ошибка, упомянутая в заголовке, произойдет.

Я попытался сохранить первое, добавив отдельный контекст для B и т.д. и т.д. Я смущен по меньшей мере. Любая справка значительно ценилась бы.

С наилучшими пожеланиями, Ryan

7
задан waiwai933 20 June 2010 в 15:13
поделиться

2 ответа

Похоже, что у вас есть два или более управляемых объектных контекста, когда вам нужен только один.

Я не знаю, зачем вам метод под названием addManagedObjectContext в RootViewController и что он должен делать. Во всех, кроме самых сложных конструкций, у вас есть только один контекст одновременно, и они не пересекаются. Контекст/ы должны храниться в делегате приложения или в специальном объекте модели. Вы никогда не будете создавать новый контекст каждый раз, когда открываете определенное представление.

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

4
ответ дан 7 December 2019 в 07:40
поделиться

Эта ошибка обычно связана с потоком и, вероятно, означает, что что-то все еще обрабатывается в другом потоке. В моем случае я делал что-то глупое в init управляемого объекта (не переопределяйте init;)).

3
ответ дан 7 December 2019 в 07:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: