Сортировка содержимого 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
.