0

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];
}
4

1 に答える 1

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];
}
于 2013-11-11T12:52:16.670 に答える