tableview中的列数据排序

时间:2013-11-08 11:03:14

标签: ios sorting nsarray nssortdescriptor

我正在使用表格视图,因为excel表单类型可以说多列。在列标题上添加平移手势以增加列的宽度,如excel表中所示。我在排序列数据时遇到问题。列数据始终排序为字母/字符串格式。虽然我有一些数字类型列以及日期类型。所以所有列都按字符串排序。 你能否提出一些选择来实现这一目标。我将数组中的所有数据都作为Web服务中的字典。

让我分享一些代码进行排序。

-(void)sortTableDataUsingSortKey:(NSString *)sortKey withAscending:(BOOL)isAscending {

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:sortKey ascending:isAscending selector:@selector(compare:)];

    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    NSArray *arrTemp = [[NSArray alloc] initWithArray:[data_array sortedArrayUsingDescriptors:sortDescriptors]];
    [data_array count]?[data_array removeAllObjects]:NSLog(@"Datsource Table Not null");
    [data_array addObjectsFromArray:arrTemp];
    arrTemp = nil;

    [_table_view reloadData];
}

1 个答案:

答案 0 :(得分:1)

我解决了这个问题。我刚刚根据字典的数据类型添加了条件排序描述符方法。并在Data_array字典中添加数据。以适当的数据类型添加数据。就像数据是数字一样,然后将它们作为数字/浮点数或NSDate添加到字典中。

现在我按照排序列检查字典中的数据类型。并更改排序选择器(比较非字符串数据和使用的字符串数据caseInsensitiveCompare :)并且其余工作正常。

最终的方法现在是......

-(void)sortTableDataUsingSortKey:(NSString *)sortKey withAscending:(BOOL)isAscending {
    NSSortDescriptor *sortDescriptor = nil;

    if ([data_array count] && [[[data_array objectAtIndex:0] valueForKey:sortKey] isKindOfClass:[NSString class]]) {
            sortDescriptor = [[NSSortDescriptor alloc] initWithKey:sortKey ascending:isAscending selector:@selector(caseInsensitiveCompare:)];
        }
        else {
            sortDescriptor = [[NSSortDescriptor alloc] initWithKey:sortKey ascending:isAscending selector:@selector(compare:)];
        }

    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    NSArray *arrTemp = [[NSArray alloc] initWithArray:[data_array sortedArrayUsingDescriptors:sortDescriptors]];
    [data_array count]?[data_array removeAllObjects]:NSLog(@"Datsource Table Not null");
    [data_array addObjectsFromArray:arrTemp];
    arrTemp = nil;

    [_table_view reloadData];
}