Вход/Регистрация
iOS. Приемы программирования
вернуться

Нахавандипур Вандад

Шрифт:

NSSortDescriptor *ageSortDescriptor =

[[NSSortDescriptor alloc] initWithKey:@"age"

ascending: YES];

Запросу выборки данных можно присвоить более одного дескриптора сортировки. Порядок расположения данных в массиве определяет и порядок, в котором задаются дескрипторы. Иными словами, вывод сортируется по первому дескриптору в массиве, в полученном множестве записи сортируются по второму дескриптору в массиве и т. д.

См. также

Раздел 16.4.

16.7. Оптимизация доступа к данным в табличных видах

Постановка задачи

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

Решение

Воспользуйтесь контроллерами для представления результатов выборки, которые являются экземплярами класса NSFetchedResultsController.

В этом разделе для ускорения разработки рассматриваемого приложения будут применены раскадровки. Подробнее о раскадровках рассказано в главе 6.

Обсуждение

Контроллер для представления результатов выборки (Fetched Result Controller) функционально аналогичен табличному виду. Как и в таблице, в нем есть разделы и строки. Контроллер для представления результатов выборки может считывать управляемые объекты из соответствующего контекста, а также подразделять эти объекты на разделы и строки. Каждый раздел является группой, если задать такое условие в параметрах запроса, а каждая строка в разделе является управляемым объектом. Есть несколько важных причин, по которым может понадобиться модифицировать ваше приложение, чтобы в нем можно было применять контроллеры для представления результатов выборки. Эти причины таковы.

• После создания контроллера для представления результатов выборки в контексте управляемых объектов любое изменение данных (вставка, удаление, модификация и т. д.) немедленно отразится и в контроллере для представления результатов выборки. Например, можно создать контроллер для представления результатов выборки, чтобы считывать управляемые объекты сущности Person. Потом где-то в другой точке вашего приложения может понадобиться вставить в контекст новый управляемый объект Person (речь идет о том самом контексте, в котором был создан контроллер для представления результатов выборки). Сразу же после этого новый управляемый объект станет доступен в контроллере для представления результатов выборки. Чудеса, да и только!

• Имея контроллер для представления результатов выборки, можно более эффективно управлять кэшем. Например, можно указать контроллеру для представления результатов выборки сохранить в памяти только N управляемых объектов на каждый экземпляр такого контроллера.

• Контроллеры для представления результатов выборки аналогичны табличным видам в том отношении, что в них, как и в таблицах, есть разделы и строки — об этом говорилось ранее. Можно использовать контроллер для представления результатов выборки, чтобы без труда отображать табличные виды вашего приложения прямо в графическом пользовательском интерфейсе.

Рассмотрим некоторые важные свойства и методы экземпляра, относящиеся к контроллерам для представления результатов выборки (все объекты относятся к типу NSFetchedResultsController).

• sections (свойство типа NSArray) — контроллер для представления результатов выборки может группировать данные, используя путь к ключу. Выделенный инициализатор класса NSFetchedResultsController принимает данный группирующий фильтр в параметре sectionNameKeyPath. После этого в массиве sections будут содержаться все сгруппированные разделы. Каждый объект данного массива соответствует протоколу NSFetchedResultsSectionInfo.

• objectAtIndexPath: (метод экземпляра, возвращает управляемый объект) — объекты, выбираемые с помощью описываемого контроллера, их можно получать по индексу в разделе или строке. Строки каждого раздела нумеруются от 0 до N — 1, где N — общее количество элементов в данном разделе. В объекте пути к индексу указывается как индекс раздела, так и индекс строки, и в результате этого совершенно точно формулируется информация, необходимая для получения конкретных объектов от контроллера для представления результатов выборки. Метод экземпляра objectAtIndexPath принимает индексные пути. Каждый индексный путь — это объект типа NSIndexPath. Если требуется создать ячейку табличного вида, воспользовавшись управляемым объектом из контроллера для представления результатов выборки, то нужно просто передать объект индексного пути методу делегата табличного вида tableView: cellForRowAtIndexPath:. Такая передача происходит в параметре cellForRowAtIndexPath этого метода. Если вы хотите сами создать индексный путь в любой другой точке вашего приложения, пользуйтесь методом класса indexPathForRow: inSection:, относящимся к классу NSIndexPath.

• fetchRequest (свойство типа NSFetchRequest) — если в любой точке вашего приложения возникнет необходимость заменить объект запроса выборки контроллером для представления результатов выборки, то это можно сделать с помощью свойства fetchRequest экземпляра NSFetchedResultsController. Такая возможность будет полезна, например, если необходимо изменить дескрипторы сортировки (о них подробно рассказано в разделе 16.6) запроса выборки — уже после того, как вы выделили и инициализировали ваши контроллеры для представления результатов выборки.

  • Читать дальше
  • 1
  • ...
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: