Базовая компоновка приложения с использованием шаблона контроллера навигации с базовой датой:
Делегат: persistenceCoordinator, managedObjectModel, managedObjectContext
- RootView: managedObjectContext (из делегата), addManagedObjectContext (с использованием шаблонаиз шаблонов), fetchResultsController
- Представление добавления / редактирования (иерархия для добавления объекта A и его B)
У меня есть два объекта, A & Bкоторые имеют отношение 1 к 1 / обратное отношение
Используя шаблон из шаблонов, приложение:
- Создает addManagedObjectContext
- Вставляет объект A
- Добавляет представление «Добавить / редактировать A» (передав ему вставленную сущность)
ШАГИ ИСКЛЮЧЕНИЯ 1:
Если я просто заполняю атрибуты A и сохраняювсе работает нормально.
- Объект вставлен в базу данных (проверено с помощью sqlite3 в командной строке)
- fetchResultsController обновляетпредставление списка
- Я могу закрыть и открыть приложение (полное закрытие / открытие, а не просто переключение приложения), и представление списка будет корректно восстановлено
Если я затем отредактирую A, я смогувыберите Добавить B, и представление добавления B будет включено (и передано сущность A)
- Заполните детали B и сохраните
- B вставлено в managedObjectContext A, отношение установленои контекст сохраняется
- Вид всплывает и все выглядит хорошо
- Оба объекта находятся в базе данных с правильными отношениями
- Я могу перезагрузить запись и посмотретьотношения, вносить изменения и т. д.
- ИСКЛЮЧЕНИЕ: Если я закрою / повторно открою приложение, чтобы вызвать выборку, произойдет ошибка, упомянутая в заголовке.
ШАГИ ИСКЛЮЧЕНИЯ2:
Если я заполню атрибуты A И атрибуты B в начальном «добавлении»
- Сохранение B инициирует полное сохранение контекста A (как указано выше)
- Сохранение A сохраняет через отношения делегатов, установленныеemplate (и объединяет результат в основной managedObjectContext и т. д.)
- Объекты вставляются в базу данных правильно
- Однако fetchResultsController НЕ обновляется для отображения новых записей
- ИСКЛЮЧЕНИЕ: Если я закрою / снова открою приложение, чтобы вызвать выборку, произойдет ошибка, упомянутая в заголовке.
Сначала я попытался сохранить A, добавив отдельный контекст для B и т. Д.и т.д. Я запутался, если не сказать больше.Любая помощь будет принята с благодарностью.
Ура, Райан