如何在实现 UITableViewDataSource 协议的类中重新加载数据
Posted
技术标签:
【中文标题】如何在实现 UITableViewDataSource 协议的类中重新加载数据【英文标题】:How to reloadData in class which implements UITableViewDataSource protocol 【发布时间】:2011-02-21 22:25:53 【问题描述】:我有一个实现 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 方法中从异步服务器调用中获取数据,该方法填充一个数组并确定表中的行/节数。
但是在调用返回一些结果之前,numberOfSectionsInTableView
和 numberOfRowsInSection
被执行,导致 0 行和 0 节,因此是一个空表。
我想将[self.tableView reloadData]
放在callBack 中,但我无权访问数据源类中的tableView。
任何人都可以指导我如何通过数据源类在 tableView 中重新加载数据,因为我以后可能也需要它来刷新数据。
谢谢
【问题讨论】:
【参考方案1】:为了快速解决这个问题,您可以在 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];
【讨论】:
以上是关于如何在实现 UITableViewDataSource 协议的类中重新加载数据的主要内容,如果未能解决你的问题,请参考以下文章
在Winform中如何实现GridControl数据导出到word,pdf文档?GridControl如何实现分页?