Вопрос

У меня проблема с сортировкой содержимого 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top