如何在实现UITableViewDataSource协议的类中重新加载数据

时间:2011-02-21 22:25:53

标签: iphone objective-c reloaddata uitableview

我有一个实现UITableViewDelegate协议的类,还有另一个处理数据的类,即它实现了UITableViewDataSource协议。

@interface TableViewClass : UITableViewController <UITableViewDelegate>

@interface TableDataSource : NSObject <UITableViewDataSource>

我将TableViewClass设置为delegate,将TableDataSource设置为datasource

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

我在TableDataSource类的init方法中从异步服务器调用中获取数据,该方法填充数组并确定表中的行/节数。

但是在调用返回一些结果之前,numberOfSectionsInTableViewnumberOfRowsInSection被执行,导致0行和0个部分,因此是一个空表。

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

1 个答案:

答案 0 :(得分:4)

要快速解决这个问题,您可以在TableDataSource上为UITableView添加@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];