Я использую Базовые Данные в своем первом приложении для iPhone и пытаюсь понять NSFetchedResultsController. Это работает отлично в моем корневом представлении. Я должен инстанцировать экземпляра в каждых из моих контроллеров представления? Если так, есть ли шаблон, который делает это столь же легким, как это было в моем корневом контроллере (я просто установил флажок в шаблоне при создании проекта). Когда я добавляю единственный новый контроллер представления, я не вижу опции использовать Базовые Данные.
Обновление: Даже после того, как я действительно сокращал/вставлял код в свое второе представление, он взял меня некоторое время, чтобы понять, что я также должен был установить managedObjectContext прежде, чем переключиться на новое представление. Я добавил следующую строку к своему RootViewController прежде, чем продвинуть новое представление о стопке навигации:
self.newVC.managedObjectContext = self.managedObjectContext;
Если другие ваши представления визуализируют различные сущности, то да, вы должны использовать другой NSFetchedResultsController
. В принципе, вы можете обойтись копированием и вставкой кода из автогенерируемого корневого контроллера представления для других контроллеров представления... просто измените имя сущности.
Однако, если другие (табличные) представления в вашей иерархии просто отображают различные атрибуты одной и той же сущности, эффективнее/проще просто передать существующий объект NSFetchedResultsController
вниз по иерархии. Просто создайте член NSFetchedResultsController
в интерфейсе класса и откройте его как свойство в .h-файле контроллера представления, а затем синтезируйте свойство и освободите его в .m-файле. Затем установите свойство перед тем, как поместить контроллер представления в стек.