52 votes

- [UIApplication delegate] doit être appelé à partir du thread principal uniquement.

Cet avertissement pose un grave problème car je ne peux vraiment pas appeler le délégué en dehors du thread principal à l'aide de Xcode 9 beta 2. Chose étrange, cela fonctionnait lorsque j'utilisais Xcode 8.3.3.

De plus, je pensais que ce ne serait qu'une bonne pratique d'appeler les délégués depuis le fil principal uniquement, n'est-ce pas? Alors, pourquoi cela provoque-t-il le blocage de l'application maintenant?

82voto

orkoden Points 2262

Appelez-le simplement du fil principal comme ceci.

 dispatch_async(dispatch_get_main_queue(), ^{
  [[UIApplication delegate] fooBar];
});
 

Tendre la main au délégué de votre application de cette manière est un indice que votre architecture pourrait nécessiter un nettoyage minime.

Vous pouvez appeler des délégués à partir de n’importe quel fil de discussion. Vous devez seulement vous assurer que vous êtes sur le fil principal des appels UIKit. Ou que vous êtes sur le bon thread auquel s'attendent vos objets CoreData. Tout dépend du contrat API que vos objets ont.

23voto

Allen Wang Points 298

Dans Swift, vous pouvez également utiliser DispatchQueue.main.async pour appeler la méthode de contrôle de l'interface utilisateur à partir du thread principal.

 DispatchQueue.main.async {
    YourUIControlMethod()
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X