Mám podivný problém s mojím zobrazením tabuľky. Načítam údaje cez JSON do môjho TableView. Kým je JSON vyžiadaný z webu v inej triede, v mojom aktuálnom zobrazení zobrazujem zobrazenie ukazovateľa aktivity a tableView je skrytá. Mám delegátsku metódu, ktorá sa volá hneď, ako bude json pripravený.
-(void)didReceivePlayers:(NSArray *)players {
[activityIndicator stopAnimating];
tableViewPlayers.hidden = false;
startButton.hidden = false;
playersData = [[NSMutableArray alloc] initWithArray:players];
[tableViewPlayers reloadData];
NSLog(@"done reloading");
}
Táto metóda sa nazýva dokonale. Kód je celkom vpred. Skryjem ukazovateľ aktivity a zobrazujem môj tableView. Potom zavolám reloadData. Zaberie to iba niekoľko milisekúnd. Ale po reloadData, môj activityIndicator je stále zobrazený a to trvá niekoľko sekúnd, aby sa zobrazil môj tableview, hoci nslog sa volá ihneď.
Tiež som sa pokúsil volať znovu načítať dáta v mainThread, ale to nič nezmenilo.
Vďaka za vašu pomoc!
odpovede:
2 pre odpoveď č. 1Uistite sa, že sa kód vykonáva v hlavnom vlákne. Môžete použiť front hlavných operácií, ako je tento:
-(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");
}];
}