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

populating tableview datasource inside init method from remote server

我有一个 tabBarView,它有两个 tableViews。这些 tableViews 中的每一个都代表来自远程服务器的一些新闻。我想在调用 tableViewController's init 方法时填充 tableView's 数据源。所以我把需要的网络操作放在 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's 方法的调用顺序如下:

所以我的问题是,在我的 newsList 数组被填充之前,方法 tableView:numberOfRowsInSection 被调用,所以我的 tableView 没有填充任何新闻。我该如何解决这个问题?

谢谢

从服务器获取数据后,您应该重新加载 table 数据。那么只有您的 table 会显示更新后的数据。

[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];
  });