Просмотр отображения в верхней части значка загрузки из-за асинхронного вызова
Я делал все в одном потоке и только начал переходить на асинхронные вызовы, поэтому я немного запутался.
Я хотел бы, чтобы представление загружалось либо с пустой таблицей, либо без таблицы вообще. MBProgressHUD должен отображаться, пока асинхронный вызов получает данные. Затем, когда данные найдены, HUD исчезает и таблица обновляется.
Теперь у меня есть все, кроме того, что HUD отображается под пустой таблицей. Вот самый актуальный код.
- (void)awakeFromNib
{
[super awakeFromNib];
[MBProgressHUD showHUDAddedTo:self.tableView animated:YES];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
self.dataController = [[StudyController alloc] initWithCredentials:email password:password];
dispatch_sync(dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUDForView:self.tableView animated:YES];
[self.tableView reloadData];
});
});
}
По сути, я думаю, что весь мой код, который правильно отображал таблицу, выполняется один раз во время выполнения асинхронного вызова и показывает пустую таблицу поверх HUD, а затем снова после вызова, когда я сообщаю ему reloadData., Как заставить его не запускаться в первый раз?
Благодарю.
1 ответ
Трудно оценить, не видя методы делегата / источника данных в табличном представлении, но ваша интуиция имеет смысл. В этом случае я вижу два варианта:
- Добавьте некоторую логику в методы делегата / источника данных, чтобы правильно отображать представление загрузки, если таблица пуста.
- Вместо того, чтобы добавлять представление загрузки к представлению таблицы, добавьте представление загрузки к суперпредставлению представления таблицы. Таким образом, вы можете убедиться, что представление загрузки всегда находится над представлением таблицы.
Я обычно выбираю второй метод, потому что я предпочитаю сосредоточить свои источники данных и делегировать методы только на табличном представлении.
Надеюсь это поможет!