J'ai un bug (que je rencontre déjà une deuxième fois) dans notre projet où j'ajoute simplement une vue en haut de la vue de UIViewController. Rien d'exceptionnel, quelque chose comme ceci:Problèmes d'interface utilisateur malgré le fait que les opérations UI s'exécutent sur le thread principal
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
self.displayEmailNotificationsIfNeeded()
}
Le bug est que, pour une raison quelconque mise en page automatique ne fonctionne pas correctement et ne l'ajoute pas au sommet, mais autour 60pt inférieur à celui nécessaire. Je soupçonne que ~ 60pt provient de l'ajustement manuel de la contrainte supérieure pour inclure la barre de navigation et la barre d'état, mais ce n'est pas vraiment important.
Le fait est que le problème disparaît si je lance la méthode explicitement sur la file d'attente principale, comme ceci:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
print("is main thread: ", NSThread.isMainThread())
dispatch_async(dispatch_get_main_queue(), {() -> Void in
print("is main thread inside block: ", NSThread.isMainThread())
self.displayEmailNotificationsIfNeeded()
})
}
déclarations d'impression retour true
pour les deux cas. Ce n'est pas vraiment horrible, mais juste par curiosité, je veux comprendre ce qui cause cela. Existe-t-il un moyen de déboguer cette situation et de comprendre pourquoi l'exécution explicite d'opérations sur le thread principal corrige certains problèmes d'interface utilisateur?