【问题标题】:UITableView not being displayed after reloading data重新加载数据后不显示 UITableView
【发布时间】:2013-11-13 17:26:06
【问题描述】:

我的 tableView 有一个奇怪的问题。 我通过 JSON 将数据加载到我的 tableView 中。在另一个类中从 Web 请求 JSON 时,我在当前视图中显示了一个活动指示器视图,并且 tableView 被隐藏。 我有一个委托方法,它会在 json 准备好后立即调用。

-(void)didReceivePlayers:(NSArray *)players {
    [activityIndicator stopAnimating];
    tableViewPlayers.hidden = false;
    startButton.hidden = false;
    playersData = [[NSMutableArray alloc] initWithArray:players];
    [tableViewPlayers reloadData];
    NSLog(@"done reloading"); 
}

该方法被完美调用。 代码非常简单。我隐藏我的活动指示器并显示我的 tableView。 然后我调用 reloadData。它只需要几毫秒。但是在 reloadData 之后,我的 activityIndi​​cator 仍然显示,并且需要几秒钟才能显示我的 tableview,尽管 nslog 正在被立即调用。

我也尝试在 mainThread 中调用 reload data,但这并没有改变任何事情。

感谢您的帮助!

【问题讨论】:

  • UI 更新,如startButton.hidden = falsereloadData 必须在主线程上完成。
  • 非常感谢!我只在 mainThread 中尝试了 reloadData。但是 UI 更改导致了奇怪的行为。谢谢!

标签: ios objective-c json uitableview reloaddata


【解决方案1】:

确保代码在主线程上执行。您可以像这样使用主操作队列:

-(void)didReceivePlayers:(NSArray *)players {

    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        [activityIndicator stopAnimating];
        tableViewPlayers.hidden = false;
        startButton.hidden = false;
        playersData = [[NSMutableArray alloc] initWithArray:players];
        [tableViewPlayers reloadData];
        NSLog(@"done reloading");
    }];

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 2023-03-31
    • 2013-06-25
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    相关资源
    最近更新 更多