Xcode [UIView initWithFrame:] doit être utilisé à partir du thread principal uniquement
J'essaie de rendre certains points de vue dans un thread séparé pour ne pas affecter le thread principal. Qui n'a jamais été un problème avant de Xcode 9. Maintenant, mes tests unitaires crash ici.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIImage *snapShot = [self generateShadowImage];
dispatch_async(dispatch_get_main_queue(), ^{
imageView.image = snapShot;
});
});
...
- (UIImage *)generateShadowImage {
//It crashes here:
UIView *shadowView = [[UIView alloc] initWithFrame:CGRectZero];
...
}
Pourquoi devrais-je pas être en mesure de rendre des éléments de l'INTERFACE utilisateur pour une utilisation ultérieure dans un thread autre que le thread principal?
source d'informationauteur Lukas Würzburger | 2017-09-22
Vous devez vous connecter pour publier un commentaire.
Xcode 9 dispose d'un nouveau moteur d'exécution Thread Principal Vérificateur qui détecte appel à UIKit à partir d'un thread d'arrière-plan et de générer des avertissements.
Je sais que sa destinée à générer des avertissements et pas de plantage de l'application, mais vous pouvez essayer de désactiver le Thread Principal Checker pour votre cible de test.
J'ai essayé ce code dans un projet d'exemple, le débogueur s'arrêta à la question (comme il est supposé), mais l'application n'a pas crash.
Vous pouvez utiliser cette fonction
Comment utiliser cette fonction?