Техническое примечание TN2203

Автоматическая табличная сортировка с NSArrayController

Привязка какао может быть мощным инструментом особенно когда дело доходит до важных задач как заполнение таблиц и сортировка его данных. Если сделано в коде, заполняя таблицы с данными и сортируя их содержание может потребовать изрядного количества работы. Привязка какао может избавить от необходимости большинство, если не все, того усилия. Эти Технические замечания показывают, как можно использовать Привязку Какао для автоматической сортировки строк в NSTableView с данными, предоставленными NSArrayController.

Введение
Автоматическая табличная сортировка
Улучшения Mac OS X 10.5
История версии документа

Введение

В нашем примере мы имеем NSTableView с два NSTableColumn объекты, связанные с NSArrayController названный «MyArray». NSArrayController установили его Класс в NSMutableDictionary, с Ключевым набором к lastname, firstname. Каждый NSTableColumn имеет следующую привязку как показано в Таблице 1.

Таблица 1  NSTableColumn Привязка

Столбец

Связанный с

Ключ контроллера

Ключевой путь модели

Фамилия

«MyArray»

arrangedObjects

lastname

Имя

«MyArray»

arrangedObjects

firstname

  Расположение пера рисунка 1

То, когда таблица сначала загружается и показала Вас, может сказать табличное представление, как сортировать данные. Используйте следующее в Перечислении 1 для создания таблицы первоначально сортированной Фамилией. Этот код должен находиться в Вашем объекте контроллера, которому принадлежит табличное представление как выход, обычно внутри awakeFromNib.

Перечисление 1  , первоначально сортирующее табличное представление.

[myTableView setSortDescriptors:
    [NSArray arrayWithObject:
        [[[NSSortDescriptor alloc] initWithKey:@"lastname" ascending:YES] autorelease]]];

Пользователи тогда будут в состоянии свободно сортировать таблицу путем щелчка по каждому NSTableColumn заголовок.

Автоматическая табличная сортировка

Когда пользователи добавляют больше имен к таблице, список тогда кажется неисправным. Когда дополнительные имена добавляются к таблице, что должно быть сделано для хранения данного порядка сортировки? Это то, где NSSortDescriptor объект, связанный с NSArrayController пригождается.

Необходимо связать Ваш NSArrayController к ряду NSSortDescriptor объекты. Это может быть сделано путем обеспечения объекта контроллера, реализующего метод для возврата NSArray из NSSortDescriptor объекты.

  Контроллер перечисления 2 возражает, что возвращает NSSortDescriptors

@implementation MyControllerObject
 
- (NSArray *)sortDescriptors
{
    return [myTableView sortDescriptors];
}
 
//...
 
@end

Тогда можно связать Ваш NSArrayController к «MyControllerObject», ключевой путь модели = sortDescriptors.

Даже учитывая эту привязку, объекты не сохранены сортированными, когда недавно вставлено. Это является, возможно, еще более запутывающим, когда заголовки столбцов указывают, что была сделана сортировка. Почему это? Мы поместили сортировку полностью в руки контроллера массива. Хорошие новости - то, что все, что мы должны сделать, должно сказать ему замечать и вызывать rearrangeObjects.

[myArrayController rearrangeObjects];

Перечисление 3 является примером, показывающим, как добавить новое имя к NSArrayController.

Перечисление 3  , Добавляющее имя к NSArrayController

NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                     @"Sally", @"firstname",
                                     @"Sixpack", @"lastname",
                                     nil];
[myArrayController addObject: dict];
[myArrayController rearrangeObjects];

Улучшения Mac OS X 10.5

Благодаря добавлению функции «Auto Rearrange Objects» NSArrayController для 10,5, Вы больше не должны вызывать:

[myArrayController rearrangeObjects];

Использовать функцию «Auto Rearrange Objects» также:

  1. Установите флажок «Auto Rearrange Objects» для Вашего NSArrayController в интерфейсном разработчике.

  2. Вызвать [myArrayController setAutomaticallyRearrangesObjects:YES]; в Вашем коде.

Имена, добавленные к контроллеру массива, будут автоматически сортированы с остальной частью списка.



История версии документа


ДатаПримечания
22.02.2012

Новый документ, показывающий, как можно использовать привязку Какао для автоматической сортировки строк в NSTableView.