Сортировка содержимого NSTableColumn

У меня проблема с сортировкой содержимого NSTableColumn. В моем NSTableView есть три столбца: файл, размер, путь. Содержимое хранится в NSMutableArray. Каждый объект в этом массиве является NSDictionary, содержащий три ключа: файл, размер и путь-значение для каждого NSString.

в Interface Builder в атрибутах каждого столбца таблицы я могу выбрать параметры сортировки: Селектор: IB ввел " compare:", который я думаю, в порядке, потому что я сравниваю NSStrings. Ключ сортировки - и это проблема я думаю - я не знаю, что туда входит.

какие-то зацепки? Если у вас есть вопросы о моем коде, пожалуйста, спросите.

2 ответов


я нашел полное решение.

во-первых, перейдите в Interface Builder. Выберите столбец, который требуется отсортировать. Перейдите к инспектору столбца и выберите первую кнопку, чтобы увидеть "атрибуты столбца таблицы". Установите соответствующие значения (буквально, не требуется " или " или@):

Sort key: file

где "файл" - это ключ словаря, содержимое которого отображается в вашем столбце.

Selector: compare:

стандартные функции сортировки.

теперь сохраните все изменения и перейти к Xcode, к классу, в котором находится модель, источник данных, показанных в NSTableView. Вы уже должны знать, что вам нужны два метода:

-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn
 *)tableColumn row:(NSInteger)row

эти два необходимы для соответствия неофициальному протоколу NSTableDataSource. Вы можете прочитать об этом в центре MacDev.

теперь все, что вам нужно сделать, это добавить новый метод:

-(void)tableView:(NSTableView *)tableView sortDescriptorsDidChange: (NSArray *)oldDescriptors

он может содержать очень простой код, который будет делать это:

-(void)tableView:(NSTableView *)tableView sortDescriptorsDidChange: (NSArray *)oldDescriptors 
{       
    NSArray *newDescriptors = [tableView sortDescriptors];
    [results sortUsingDescriptors:newDescriptors]; 
    //"results" is my NSMutableArray which is set to be the data source for the NSTableView object.
    [tableView reloadData]; 
}

и это все. Он работает в моем приложении, надеюсь, он будет работать в вашем случае: D все должно работать автоматически. Я только что сохранил все файлы и создал приложение. И это сработало. :)

сайт, который помог мне: CocoaDev: SortingNSTableView


ключ key, который используется в словаре для извлечения значения.

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

если ваши ключи @ "файл", @" размер", @" путь", и вы хотите сортировать по file тогда попробуйте поставить value.file на Sort Key поле в IB.

используйте ключи, которые вы используете, когда вставка values в своем NSDictionary.