Как установить порядок сортировки по умолчанию для NSTableView?

У меня есть приложение cocoa, которое получило TableView с привязками к модели через NSArrayController.

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

buildwatch http://public.west.spy.net/BuildWatch.png

Обычно я запускаю программу и дважды нажимаю на последний заголовок, чтобы отсортировать его правильно. Есть ли способ в nib/bindings/what, чтобы указать порядок сортировки по умолчанию или программно сказать ему, что произойдет, если я дважды щелкнул его? Или даже помните предыдущий порядок сортировки?

3 ответа

Посмотрите NSSortDescriptor.

Вы можете настроить его с помощью -setSortDescriptors: в ​​NSTableView. Или вы можете поместить дескрипторы сортировки в ivar и связать их с привязкой Sort Descriptor в IB.


Обычно я делаю такие вещи в -windowDidLoad. Предположим, что ваш подкласс NSWindowController имеет IBOutlet _arrayController, установленный в соответствующем NSArrayController, и что ваша модель обладает свойством buildETA:

NSSortDescriptor *buildETASortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"buildETA" ascending:NO];
[_arrayController setSortDescriptors:[NSArray arrayWithObject:buildETASortDescriptor]];
[buildETASortDescriptor release];

Изменить: Изменено -awakeFromNib в -windowDidLoad, так как это гипотетический подкласс NSWindowController


Вы также можете создать этот настраиваемый класс, а затем в InterfaceBuilder выберите свой ArrayController и измените Custom Class в Indentity Inspector на свой CustomArrayController

#import "CustomArrayController.h"
@implementation PatchbayArrayController
-(void)awakeFromNib
{
 [super awakeFromNib];
 NSSortDescriptor *mySortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"propertyNameHere" ascending:YES];
 [self setSortDescriptors:[NSArray arrayWithObject:mySortDescriptor]];
 [mySortDescriptor release]; 
}
@end

licensed under cc by-sa 3.0 with attribution.