Почему 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 будет скрыт в основном потоке. Обратите внимание, что важно изменять иерархию представлений (и, как правило, "выполнять работу интерфейса") только в главном потоке.

Другие вопросы по тегам