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 节,因此是一个空表。

[self.tableView reloadData]想把callBack放进去,但我无权访问数据源类中的tableView。任何人都可以指导我如何通过数据源类在 tableView 中重新加载数据,因为我以后可能也需要它来刷新数据。谢谢

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 回答