Question

Je télécharge un ensemble de fichiers de l'iPhone vers un service Web. Je souhaite avoir un UIAlertView à l'écran avec un UIActivityIndicatorView à l'intérieur. Je dois que ça fonctionne bien. Cependant, je souhaite mettre à jour le titre de UIAlertView au fur et à mesure que chaque fichier est téléchargé. ("Chargement du fichier 1 ...", "Chargement du fichier 2 ...", etc.)

Je sais que vous ne pouvez pas simplement définir le titre dans une boucle avec des demandes Web synchrones, car la boucle d'exécution de l'interface utilisateur ne sera jamais appelée. J'ai essayé d'utiliser NSTimer pour lancer les requêtes Web, mais comme chaque durée de requête est imprévisible, cela ne fonctionne pas. (Le message pourrait se mettre à jour avant que la demande ne soit réellement terminée.)

Je souhaite vraiment télécharger chaque fichier de manière synchrone, un à la fois, car la bande passante de l'iPhone est assez limitée. Je n'arrive tout simplement pas à trouver un mécanisme permettant de dire "une fois cette opération synchrone terminée, laissez l'interface utilisateur se mettre à jour pour un tick, puis effectuez une autre opération synchrone."

Était-ce utile?

La solution

OK, voici l'approche que j'ai adoptée pour résoudre ceci:

  1. Créer le UIAlertView
  2. Démarrer une demande Web asynchrone pour publier l'élément, définir le délégué sur self
  3. Dans la méthode connectionDidFinishLoading:, vérifiez s'il y a plus d'éléments à publier. Si tel est le cas, mettez à jour le titre et lancez une autre requête async. Sinon, ignorez l'alerte.

Cela signifie que vous devez gérer quelques variables de classe pour savoir quelle requête est en cours de téléchargement, mais cela fonctionne parfaitement et ne nécessite pas de thread complexe ni quoi que ce soit d'autre.

Autres conseils

avez-vous essayé cela?

alertView.title = @"new title";
[alertView setNeedsDisplay];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top