Afficher en haut de l'icône de chargement en raison d'un appel asynchronous

Je faisais tout en un seul thread et je viens de commencer à passer aux appels asynchronouss, donc je suis un peu confus.

Ce que je voudrais, c'est que la vue soit chargée, soit avec une table vide, soit sans table du tout. MBProgressHUD doit s'afficher pendant que l'appel async obtient datatables. Ensuite, lorsque datatables sont trouvées, le HUD disparaît et la table se rafraîchit.

Ce que j'ai maintenant, c'est que tout fonctionne, sauf que le HUD est affiché sous la table vide. Voici le code le plus pertinent.

- (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]; }); }); } 

Ce qui se passe, je pense, c'est tout mon code qui rendait la table correctement exécuté une fois pendant que l'appel asynchronous était en cours d'exécution, et une table vide sur le HUD, et encore après l'appel quand je le reloadData . Comment puis-je l'empêcher de courir cette première fois?

Merci.

Il est difficile de jauger sans voir les methods delegate / datasource de votre vue de table, mais votre intuition a du sens. Dans ce cas, je peux voir deux options:

  1. Ajoutez une logique à vos methods delegate / datasource pour afficher correctement votre vue de chargement si la table est vide.
  2. Plutôt que d'append la vue de chargement à la vue de table, ajoutez la vue de chargement à la vue d'set de la vue de table. De cette façon, vous pouvez vous assurer que la vue de chargement est toujours au-dessus de la vue de la table.

J'opte généralement pour la deuxième méthode, parce que je préfère concentrer mes methods de source de données et de déléguer sur la seule vue de la table.

J'espère que cela t'aides!