2013-11-02 36 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

謝謝!接受答案。 :) –