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

StackOverflow https://stackoverflow.com/questions/1628058

Вопрос

ОК.это настоящий вызов.

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

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

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

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

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

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

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

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

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

Есть какие-нибудь идеи?

Это было полезно?

Решение

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top