4

У меня есть NSTableView, который я пытаюсь сортировать. Источником данных является NSMutableArray, который содержит экземпляры пользовательских классов.NSTable и NSMutableArray Sorting

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

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

NSSortDescriptor *sortDescriptor; 
sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"make" ascending:bool_asc_desc] autorelease]; 
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; 
NSArray *sortedArray; 
sortedArray = [ads_printers_array sortedArrayUsingDescriptors:sortDescriptors]; 

То, что я хотел бы знать, как я могу передать на колонке таблицы, которая была нажата? Это позволило бы мне изменить initWithKey: @ "make" (используя операторы if), чтобы я мог сортировать в соответствии с нажатым заголовком.

Спасибо.

P.S. Я попытался следующие:

if ([ads_rdp_driver_table selectedColumn] == tc_make) 

с ads_rdp_driver_table быть моим NSTableView и tc_make будучи NSTableColumn, который я определил. Тем не менее, я получаю эту ошибку:

ISO C++ запрещает сравнение между указателем и целым

Я предполагаю, что это может работать, если я мог понять ошибку.

ответ

3

Метод NSTableView возвращает индекс выбранного столбца (а не указатель на него), поэтому вы получаете ошибку компиляции. Чтобы получить фактический столбец, попробуйте что-то вроде этого (код my содержит ошибки, Im набирает дословно):

NSTableColumn * selectedColumn = (NSTableColumn *)[[tableView tableColumns] objectAtIndex: [tableView selectedColumn]]; 
NSLog(@"Column identifier: %@", [selectedColumn identifier]);