如何在实现 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 方法中从异步服务器调用中获取数据,该方法填充一个数组并确定表中的行/节数。

但是在调用返回一些结果之前,numberOfSectionsInTableViewnumberOfRowsInSection 被执行,导致 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如何实现分页?

如何在 Apple 地图中实现选项卡视图

最近在研究nodejs如何实现文件上传功能

如何实现两个div之间的连线,我现在有这个需求,请问如何实现

如何在unix环境下实现共享内存

Spring:如何在运行时更改接口实现