фильтрация контента для UITableView - PullRequest
3 голосов
/ 10 декабря 2011

Я просматривал пример кода TableSearch от Apple. Похоже, что у них есть NSArray для всего содержимого и NSMutableArray для отфильтрованного содержимого. И затем, если фильтр включен, они будут показывать NSMutableArray. Если он выключен, он покажет NSArray, который имеет все данные.

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

2) Чтобы добавить к этому вопросу, если бы у меня был фильтр четырех разных категорий, я бы по-прежнему использовал один NSMutableArray, который показывает отфильтрованное содержимое, когда фильтр включен? Или я создаю четыре разных NSMutableArrays для каждого типа фильтра, а затем показываю этот список в зависимости от того, какой фильтр включен.

Предполагая, что общая реализация должна иметь NSArray для списка, я запутываюсь, если создание массивов отфильтрованного списка заранее стоит дорого, если я должен был сделать четыре различных NSMutableArrays, или если в зависимости от щелчка от Пользователь, какой параметр фильтра они выбирают, я должен создать NSMutableArray на лету, а затем перезагрузить [tableView reloadData];

Спасибо.

Ответы [ 2 ]

2 голосов
/ 10 декабря 2011

У меня нет этого примера приложения, но вы, как правило, фильтруете с помощью предиката, поэтому вам будет полезно просмотреть документы по NSPredicate .

* 1004.* Поэтому, когда вы хотите изменить фильтр, вы делаете это путем изменения предиката.Вам не нужно создавать все отфильтрованные результаты.Вы создаете только тот, который вам нужен в любой момент.

С массивами вы можете фильтровать, используя код, подобный , показанному в этом примере .Ключевые строки:

NSPredicate *predicate;
predicate = [NSPredicate predicateWithFormat:@"length == 9"];
NSArray *myArray2 = [myArray filteredArrayUsingPredicate:predicate];

Фильтрация не всегда выполняется с массивами.Это можно сделать с помощью NSFetchedResultsControllers при использовании Core Data.Предикаты используются там также, почти таким же образом.Предикаты можно использовать и для других целей, включая фильтрацию регулярных выражений.На это стоит посмотреть, если вы с ним не знакомы.

1 голос
/ 10 декабря 2011

Это действительно зависит.Если ваши базовые данные находятся в Базовых данных, используйте NSFetchedResultsController и присвойте им NSPredicate s.Если у вас есть массив данных, может быть проще всего обойти его и создать другой массив данных.

В целом, сам фильтр вряд ли будет таким же дорогим, как и весь процесс рисования (который включает создание экземпляров)или переработка ячеек стола).Вы можете делать то, что просто и легко, с помощью инструментов.

Хранение четырех разных массивов обычно не очень хорошая идея с точки зрения памяти, которая является дефицитным ресурсом.

Несмотря ни на что, reloadDataбудет участвовать.(Возможно, в зависимости от версии ОС - см. NSFetchedResultsController документы.)

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