Должен ли я иметь NSFetchedResultsController в каждом представлении? - PullRequest
10 голосов
/ 08 февраля 2010

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

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

self.newVC.managedObjectContext = self.managedObjectContext;

Ответы [ 2 ]

11 голосов
/ 08 февраля 2010

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

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

3 голосов
/ 11 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...