iphone - 如何在实现 UITableViewDataSource 协议(protocol)的类中重新加载数据

标签 iphone objective-c reloaddata uitableview

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

@interface TableViewClass : UITableViewController <UITableViewDelegate>

@interface TableDataSource : NSObject <UITableViewDataSource>

我将 TableViewClass 设置为委托(delegate),将 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 中重新加载数据,因为我稍后可能也需要它来刷新数据。 谢谢

最佳答案

为了快速解决这个问题,您可以在 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

现在,在创建数据源时设置属性:

// UITableViewController.m
TableDataSource* datasource = [[TableDataSource alloc] init]
[datasource setTableView:self.tableView]
[self.tableView setDelegate:self];
[self.tableView setDataSource:dataSource];

当您需要从 DataSource 重新加载数据时,您现在可以:

[self.tableView reloadData];

关于iphone - 如何在实现 UITableViewDataSource 协议(protocol)的类中重新加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5071972/

相关文章:

iphone - 防止首次启动 iOS 时调用 AFNetworking 可访问性状态

ios - 在 iOS Objective-c 中粘在键盘上的自定义 UIView

Swift - tableView.reloadData() 不工作,即使它看起来在正确的线程中

swift - 如何从同一目标内的不同 .swift 文件访问 iVar?

ios - tableView :indexPathForCell returns nil when clicking in cell

ios - DisplayAlert 仅在 Xamarin 表单 ios 上不显示

iphone - TableView 进入 tabBarController

ios - 如何在 swift 中为 UILabel 创建限制

ios - 在 objective-c 中从另一个 iOS 应用程序设置 Google Authenticator?

objective-c - 无法在选项卡栏 Controller 中重新加载 TableView