我有一个实现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方法中从异步服务器调用中获取数据,该方法填充数组并确定表中的行/节数。
但是在调用返回一些结果之前,numberOfSectionsInTableView
和numberOfRowsInSection
被执行,导致0行和0个部分,因此是一个空表。
我想把[self.tableView reloadData]
放在callBack中,但是我没有访问datasource类中的tableView。
任何人都可以指导我如何通过数据源类在tableView中重新加载数据,因为我以后可能还需要它来刷新数据。
感谢
答案 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];