2013-11-02 35 views
3

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

-(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数据,但是这并没有改变一件事情。

感谢您的帮助!

+1

这两个UI更新,像'startButton.hidden = false'和'reloadData' *都必须在主线程上完成。 –

+0

完美谢谢!我只在mainThread中尝试了reloadData。但UI变化引起了怪异的行为。谢谢! –

回答

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

} 
+0

谢谢!接受答案。 :) –