2013-11-02 1 views
3

У меня странная проблема с моим табличным представлением. Я загружаю данные через JSON в свой tableView. Пока JSON запрашивается из Интернета в другом классе, я показываю представление индикатора активности в своем текущем представлении, а таблицаView скрыта. У меня есть метод делегата, который называется, как только 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 мой ActivityIndicator все еще отображается, и для отображения моего табличного представления требуется несколько секунд, хотя nslog вызывается сразу.

Я также попытался вызвать перезагрузку данных в mainThread, но это ничего не изменило.

Благодарим за помощь!

+1

Оба обновления пользовательского интерфейса, как 'startButton.hidden = false' и в' reloadData' * должны * быть сделаны в основном потоке. –

+0

Прекрасное спасибо! Я попробовал reloadData в mainThread. Но изменения пользовательского интерфейса вызвали странное поведение. Спасибо! –

ответ

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

Спасибо! Ответ принят. :) –