4

UITableViewDelegate プロトコルを実装するクラスがあり、データを処理する別のクラス、つまり UITableViewDataSource プロトコルを実装するクラスがあります。

@interface TableViewClass : UITableViewController <UITableViewDelegate>

@interface TableDataSource : NSObject <UITableViewDataSource>

TableViewClass をデリゲートとして、TableDataSource をデータソースとして設定しています

id datasource = [[TableDataSource alloc] init]
[self.tableView setDelegate:self];
[self.tableView setDataSource:dataSource];

配列を設定し、テーブル内の行/セクションの数を決定する TableDataSource クラスの init メソッドで、非同期サーバー呼び出しからデータをフェッチしています。

しかし、呼び出しが何らかの結果を返す前に、numberOfSectionsInTableViewandnumberOfRowsInSectionが実行され、結果として 0 行と 0 セクションになるため、空のテーブルになります。

callBackに入れることを考え[self.tableView reloadData]ましたが、データソース クラスの tableView にアクセスできません。後でデータを更新するために必要になる可能性があるため、datasource クラスを介して tableView で reloadData を行う方法を教えてもらえますか。ありがとう

4

1 に答える 1

4

これをすばやく解決するには、UITableView の TableDataSource に @property を追加します。

// TableDataSource.h
@interface TableDataSource : NSObject <UITableViewDataSource>{
    UITableView *tableView;
}

@property(retain)UITableView *tableView;

@end

// TableDataSource.m
@implementation TableDataSource
@synthesize tableView;

- (void)dealloc{
    self.tableView = nil;
}

@end

ここで、DataSource を作成するときにプロパティを設定します。

// UITableViewController.m
TableDataSource* datasource = [[TableDataSource alloc] init]
[datasource setTableView:self.tableView]
[self.tableView setDelegate:self];
[self.tableView setDataSource:dataSource];

DataSource からデータをリロードする必要がある場合、次のことができるようになりました。

[self.tableView reloadData];
于 2011-02-21T22:59:08.530 に答える