2017-09-18 4 views
0

Je suis nouveau à Swift et je construis une petite application qui transfère des données HealthKit vers un service web auto-construit. Je placé un UIProgressView dans mon Main.storyboard et connecté à ViewController.swift:Définition de UIProgressView à partir de tâches en arrière-plan asynchrones

@IBOutlet weak var syncHealthProgress: UIProgressView! 

depuis une action il y a 6 appels à un webservice via plusieurs étapes en dehors du ViewController. D'abord, je récupère les données de santé qui sont faites en arrière-plan (HKStatisticsCollectionQuery). Dans la tâche de fond, je prends le résultat et fais un appel API avec les données (URLSession) qui sont aussi asynchrones. Ce que je veux faire: à chaque fois que l'appel API réussit, je veux augmenter la progression de 1/6.

Alors, quelle est la meilleure pratique pour cela? Il n'est pas possible d'accéder à l'interface utilisateur depuis l'extérieur du thread principal (en essayant de transférer le paramètre syncHealthProgress en paramètre vers les appels API qui semblent sales et qui ne fonctionnent pas).

Un conseil?

+0

S'il vous plaît mettre à jour votre question avec le code pertinent montrant ce que vous avez fait et ce que vous avez essayé. Expliquez clairement les problèmes que vous rencontrez avec le code. – rmaddy

Répondre

1

Si votre juste essayer de vous assurer que votre logique de mise à jour de l'interface utilisateur fonctionne sur le thread principal puis juste faire:

DispatchQueue.main.async { 
    // code to run on main queue 
} 
+0

Fonctionne comme le charme, merci! –