3

我的 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 中调用重新加载数据,但这并没有改变任何事情。

谢谢你的帮助!

4

1 回答 1

2

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

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

}
于 2013-11-02T18:13:39.590 回答