В моем приложении есть табличное представление. Он имеет 2 колонки, один «ключ» и один «значение», код для Tableview, как показано ниже:Как сортировать по столбцу tableview в какао
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
{
//DataEntity *dataEntity = [[DataEntity alloc]init];
return [dataEntity.items count];
}
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
//DataEntity *dataEntity = [[DataEntity alloc]init];
if([[tableColumn identifier]isEqualToString:@"key"])
{
return [[dataEntity.items allKeys] objectAtIndex:row];
}
if([[tableColumn identifier] isEqualToString:@"value"])
{
return [[dataEntity.items allValues] objectAtIndex:row];
}
return nil;
}
dataEntity является signle экземпляр источника данных и элементов является изменяемым dictianary. Теперь я хочу сортировать по одному столбцу после того, как я нажму заголовок этого столбца. Как его реализовать? Я пытаюсь сделать это, как показано ниже, но это не сработает.
-(void)tableView:(NSTableView *)tableView mouseDownInHeaderOfTableColumn:(NSTableColumn *)tableColumn
{
NSImage *indicatorImage;
if(sortAscending)
{
indicatorImage = [NSImage imageNamed:@"NSAscendingSortIndicator"];
NSMutableDictionary *tempDict = [[NSMutableDictionary alloc]init];
[tempDict setDictionary:dataEntity.items];
NSLog(@"before sort %@",tempDict);
NSArray *keys = [tempDict allKeys];
NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1,id obj2){
return ([obj1 compare:obj2 options:NSNumericSearch]);
}];
[dataEntity.items setDictionary:tempDict];
}
else
{
indicatorImage = [NSImage imageNamed:@"NSDescendingSortIndicator"];
}
sortAscending=!sortAscending;
[tableView setIndicatorImage:indicatorImage inTableColumn:tableColumn];
[tableView reloadData];
}