Должен ли я иметь NSFetchedResultsController во всех представлениях?

Я использую Core Data в своем первом приложении для iPhone и пытаюсь понять NSFetchedResultsController. Он отлично работает в моем корневом представлении. Нужно ли создавать экземпляр экземпляра в каждом из моих контроллеров? Если да, есть ли шаблон, который делает это так же просто, как и в моем корневом контроллере (я просто установил флажок в шаблоне при создании проекта). Когда я добавляю один новый контроллер представления, я не вижу возможности использовать Core Data.

Обновление: Даже после того, как я вырезал/вставлял код в свое второе представление, мне потребовалось некоторое время, чтобы понять, что мне также необходимо установить managedObjectContext, прежде чем переключиться на новое представление. Я добавил следующую строку в свой RootViewController, прежде чем нажимать новый вид на стек навигации:

self.newVC.managedObjectContext = self.managedObjectContext;

Ответ 1

Если ваши другие представления визуализируют разные объекты, тогда да, вы использовали бы другой NSFetchedResultsController. Вы можете в принципе уйти с копированием и вводом кода из автогенерированного контроллера корневого представления для ваших других контроллеров представлений... просто измените имя Entity.

Однако, если другие (таблицы) представления вниз по вашей иерархии просто отображают разные атрибуты одного и того же Entity, более эффективно/проще просто передать существующий объект NSFetchedResultsController вниз по иерархии. Просто создайте элемент NSFetchedResultsController в интерфейсе класса и покажите его как свойство в файле .h файла диспетчера представлений, а затем синтезируйте свойство и выпустите его в своем .m файле. Затем установите свойство, прежде чем нажимать контроллер просмотра в стеке.

Ответ 2

Я хотел бы добавить, что если вы используете несколько NSFetchedResultsControllers для одного и того же объекта, но в разных таблицах ваш UITableView не будет обновляться, если вы вставляете данные для одного и того же объекта, используя другой контроллер. Это связано с тем, что ваш UITableView не получит сообщения willChangeContent и т.д. Из NSFetchedResultsController, для которых вы не настроили себя как делегат.