0

最初に、私の問題を完全に理解できるように、いくつかの背景情報を提供します。私は解決策を探すのに何時間も費やしましたが、それでもそれを正しく理解できないようです。そこで、uiviewcontroller(SubviewPracticeMasterViewController)のサブビューとしてtableViewをロードするアプリを作成しようとしています。テーブルビューは別のuiviewcontroller(SubviewPracticeViewController)でサブクラス化され、SubviewPracticeMasterViewControllerでuiviewとしてロードされます。

LeadsInformationというNSObjectもあります。LeadsInformation.hは次のようになります

#import <Foundation/Foundation.h>

@interface LeadsInformation : NSObject

@property (nonatomic, copy)NSString *leadName;
@property (nonatomic, copy)NSString *lastName;
@property (nonatomic, copy)NSString *firstName;
@property (nonatomic, copy)NSString *areaCode;
@property (nonatomic, copy)NSString *phoneNumber;
@property (nonatomic, copy)NSString *status;
@property (nonatomic, copy)NSString *notes;


-(id)initWithName: (NSString *)leadName lastName: (NSString *)lastName firstName:      (NSString *)firstName
     areaCode: (NSString *)areaCode phoneNumber: (NSString *)phoneNumber status: (NSString *)status 
        notes: (NSString *)notes;

@end

そのため、SubviewPracticeViewController.mでは、プログラムで4つのLeadsInformationオブジェクトを「dataArray」という配列に追加し、cellForRowAtIndexPathメソッドのカスタムセルに特定の文字列値を読み込みます。

今、これが私の問題が発生しているところです。また、xibファイルからカスタムヘッダーを読み込んでいます。ヘッダーには2つのボタンがあります。最初のボタンで最初の列に基づいてセルをアルファベット順に並べ替え、2番目のボタンでセルの2番目の列に基づいてセルをアルファベット順に並べ替えます。

テーブルビューは、カスタムテーブルヘッダーも含めて、希望どおりに表示され、ボタンがクリックされています。ただし、セルは並べ替えられていません。ヘッダーのボタンに関連付けられたIBActionメソッドの最初の列で並べ替えるためのコードを配置しました。コードは次のとおりです。

- (IBAction)sortLeadName:(id)sender {
    NSSortDescriptor *leadNameDescriptor = [[NSSortDescriptor alloc] initWithKey:    @"leadName" ascending:YES selector:@selector(localizedStandardCompare:)];
    NSArray *sortDescriptor = [NSArray arrayWithObject:leadNameDescriptor];
    NSArray *sortedArray = [self.dataArray sortedArrayUsingDescriptors:sortDescriptor];

    self.dataArray = [[NSMutableArray alloc] initWithArray:sortedArray];
    [[self tableView] reloadData];

}

念のため、cellForRowAtIndexPathのコードを次に示します。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    UITableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:@"Identifier"];
    if (cell == nil) {

        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
        cell = [topLevelObjects objectAtIndex:0];
    }

    LeadsInformation *leadAtIndex = [self.dataArray objectAtIndex: indexPath.row];

    UILabel *label;
    label = (UILabel *)[cell viewWithTag:1];
    label.text = leadAtIndex.leadName;

    label = (UILabel *)[cell viewWithTag:2];
    label.text = leadAtIndex.status;

    return cell;
}

どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

2

それで、私は私を失望させていたいくつかの不必要な仕事をしていたことがわかりました。配列のコピーを並べ替えてから、dataArrayを新しい並べ替えられたコピーとして再読み込みする必要はありませんでした。次のように、SortDescriptorを使用して配列を直接並べ替える必要がありました。

-(IBAction)sortLeadName:(id)sender {
    NSSortDescriptor *sortDescript = [[NSSortDescriptor alloc] initWithKey:@"status"  ascending: YES selector:@selector(localizedStandardCompare:)];

    [self.dataArray sortUsingDescriptors: [NSArray arrayWithObject: sortDescript]];
    [self.tableView reloadData];
}
于 2012-09-18T20:03:24.970 に答える