Почему HUD не отображается?
Большая часть моих данных поступает из веб-службы, и это может занять довольно много времени. Особенно в небольших сетях.
Экран поставляется в черном цвете. Я могу видеть из NSLogs, что данные сеют трубу, но индикатор не показывает. Затем, когда это так, индикатор всплывает на короткое время, а затем исчезает.
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[HUD showUIBlockingIndicatorWithText:@"Fetching DATA"];
[self callDatabase];
[HUD hideUIBlockingIndicator];
}
1 ответ
Это звучит как твой [self callDatabase]
Метод может быть блокировка основного потока. Когда основной поток заблокирован, изменения в иерархии представления не будут отражены на экране. Можете ли вы поставить работу базы данных в фоновом режиме? Возможно, вот так:
[HUD showUIBlockingIndicatorWithText:@"Fetching DATA"];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self callDatabase];
dispatch_async(dispatch_get_main_queue(), ^{
[HUD hideUIBlockingIndicator];
});
});
Это вызвало бы callDatabase
Способ запуска в фоновом режиме, не блокирующий ваш основной поток. Затем, когда работа с базой данных будет завершена, HUD будет скрыт в основном потоке. Обратите внимание, что важно изменять иерархию представлений (и, как правило, "выполнять работу интерфейса") только в главном потоке.