gpt4 book ai didi

ios - 从远程服务器在 init 方法中填充 tableview 数据源

转载 作者:行者123 更新时间:2023-11-29 01:40:14 24 4
gpt4 key购买 nike

我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com