我有一个 tabBarView,它有两个 tableViews
。这些 tableViews
中的每一个都代表来自远程服务器的一些新闻。我想在调用 tableViewController 的
init
方法时填充 tableView 的
数据源。所以我将所需的网络操作放在 init
方法中。我的 init
方法是这样的:
- (instancetype) init{
self = [super init];
[NewsManager fetch:10 remoteNewsOfLanguage:@"fa" withOffsett:1 andCompletionHandler:^(NSMutableArray *news) {
self.newsList = news;
}];
self.tabBarItem.title = @"my title";
return self;
}
newsList 是一个数组,其中包含从服务器加载的新闻。
但是当我运行我的项目时,tableViewController 的
方法的调用顺序如下所示:
tableViewController 的 init
方法被调用并完成(但尚未调用完成处理程序 block )tableViewController的
viewDidLoad
方法被调用(当tableViewController
被添加到tabBarView的
时被调用viewControllers
数组)tableViewController 的
委托(delegate)方法tableView:numberOfRowsInSection
被调用- 调用网络操作的
completionHandler
block 并将newsList 数组设置为从服务器检索到的新闻
所以我的问题是,在我的 newsList 数组被填充之前,方法 tableView:numberOfRowsInSection
被调用,所以我的 tableView
没有填充任何新闻。我该如何解决这个问题?
谢谢
最佳答案
从服务器获取数据后应该重新加载表数据。那么只有您的表格会显示更新的数据。
[NewsManager fetch:10 remoteNewsOfLanguage:@"fa" withOffsett:1 andCompletionHandler:^(NSMutableArray *news) {
self.newsList = news;
[yourTableview reloadData];//add this line
}];
添加的行完成了工作并使新数据加载到 tableView 中,但我认为您应该考虑一个小问题
[tableView reloadData]
将在 mainThread 以外的线程中执行,这将导致 tableView 上的数据加载延迟 5 到 10 秒。
为了防止这种情况,您应该以某种方式告诉它在主线程上运行 reloadData 方法。这是通过dispatch_async完成的。所以你应该像这样调用[tableView reloadData]:
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
关于ios - 从远程服务器在 init 方法中填充 tableview 数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32474301/