Контекст управляемого объекта в представлении панели вкладок

Хорошо. это вызов.

У меня есть таблица в контроллере навигации.

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

Теперь я попытался добавить это представление таблицы в представление панели вкладок (без контроллера панели вкладок, потому что оно не будет работать), но в том же контроллере навигации.

Итак, что я хочу сделать, это: Root > TabBarView (загружает Tableview) > добавить новую запись.

Проблема заключается в контексте управляемого объекта, я получаю целое "не могу найти ошибку сущности", но я не знаю, как ее исправить.

Мне удалось заставить модальный контроллер представления AddRecord отображаться из tabBarView, но он представляет себя без навигационной панели, тогда как, если я пытаюсь добавить запись в отдельное табличное представление (вне панели вкладок), это не проблема.

Теперь я вызываю свои методы из navigationBarbuttons TabBarView, перенаправляя их к методам tableviews.

Я знаю, что мои методы должны вызываться из tabBarView, а не из реального табличного представления, и они запускаются, но я не знаю, как управлять MOC, когда он находится в tabView.

Да, и это основано на рецептах и ​​книгах coredata, поэтому, когда метод add record запускается, он создает новый MOC для его создания, а затем реинтегрируется обратно в основной MOC, когда вы закончите.

Есть идеи?

2 ответа

Решение

Похоже, у вас есть пара проблем.

  1. Ошибка "Не удается найти объект" - это зависит от того, какой контекст управляемого объекта вы используете. Если вы создали отдельный MOC для управления редактируемым объектом (кстати, это хорошая идея), обязательно назначьте ему координатор постоянного хранилища. Вот как MOC обнаруживает, какие объекты доступны. Если вы используете MOC, созданный в App Delegate, убедитесь, что вы правильно пишете имя объекта.
  2. Нет навигационной панели в листе - когда вы помещаете контроллер вида на контроллер навигации, его navigationItem используется для заполнения панели навигации. Когда вы представляете контроллер вида в виде листа, отображается только контроллер вида. Он не встроен в контроллер навигации. Чтобы отобразить элемент навигации, вам нужно создать новый контроллер навигации с вашим контроллером представления в качестве корневого, а затем представить представление контроллера навигации.

Что касается основного MOC, представления и контроллеры не должны иметь значения. Получите ссылку на MOC в любом контроллере, который вы используете и работаете с этим MOC. Если ваш делегат приложения создает основной MOC, сделайте его свойством этого делегата и получите к нему доступ из вашего контроллера представления или вкладки.

Я не совсем понимаю, какая у вас проблема с навигацией, но если нет нужной панели навигации, я подозреваю, что вам нужно создать и добавить UINavigationController где-то, что вы добавляете подкласс UIViewController. Сделайте подкласс корнем нового UINavigationController и поместите контроллер во вкладку или что-то еще.

Ваш контекст управляемого объекта (MOC) не должен зависеть от навигации или представлений. Это часть модели. (Хотя, как вы знаете, 2-й MOC для отменяемого представления редактирования будет зависеть от навигации в той степени, в которой вы создаете его для использования редактором.)

Другие вопросы по тегам