Сортировка содержимого NstableColumn
-
25-09-2019 - |
Вопрос
У меня проблема с сортировкой содержимого NstableColumn. В моем NStableView есть три столбца: файл, размер, путь. Содержимое хранится в nsmutablearray. Каждый объект в этом массиве является Nsdictionary, содержащий три клавиши: файл, размер и путь - значение для каждого - это NSString.
В интерфейсе Builder в атрибутах столбца каждой таблицы я могу выбрать параметры сортировки: Selector: IB введен «Сравнить:« Что я думаю, в порядке, потому что я сравниваю Nsstrings. Сортировать ключ - и это проблема, которую я думаю - я не знаю, что здесь войти.
Любые подсказки? Если у вас есть вопросы о моем коде, пожалуйста, спросите.
Решение
Поэтому я нашел полное решение.
Во-первых, перейдите к интерфейсу 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 Все должно работать автоматически. Я только что сохранил все файлы и построил приложение. И это сработало. :)
Сайт, который помог мне:Cocaleev: SortingNstableView.
Другие советы
Ключ то key
что вы используете в словаре, чтобы получить значение.
В вашем случае у вас есть три клавиша: файл, размер и путь. Выберите тот, на который вы хотите сортировать. Ключ используется для извлечения значения из каждой записи, которая будет использоваться для сортировки.
Если ваши ключи @ «Файл», @ «Размер», @ «Путь», и вы хотите сортировать на file
Затем попробуйте поставить value.file
в Sort Key
поле в IB.
Используйте ключи, которые вы используете при вставке values
в ваш NSDictionary
.