web-dev-qa-db-fra.com

+ [CATransaction synchronize] appelé dans la transaction

Si je ferme mon application iPad pendant le chargement de données à partir de services, elle se ferme mais se rouvre immédiatement sans que je ne fasse rien. À ce stade, je ne peux rien faire; Je ne peux pas fermer l'application et je ne peux pas interagir avec l'application ou l'appareil. La seule façon d'utiliser le périphérique à nouveau est de le redémarrer. L'application ne se bloque pas, elle désactive simplement l'appareil.

Lorsque cela se produit, la ligne suivante apparaît dans la console trois fois juste après applicationWillResignActive et applicationDidEnterBackground:

+[CATransaction synchronize] called within transaction

Si l'application devait tomber en panne, ce serait presque normal, mais le fait que l'appareil devienne complètement inutile est un énorme problème. Si je pouvais intercepter ce bogue ou si, d'une manière ou d'une autre, détecter quand CATransaction pose le problème, tout irait bien.

Des idées?

30
Confused

Cela se produit lorsque plusieurs animations ont lieu sur le thread principal. J'ai rencontré le même problème. Dans mon cas, l'application se fige lors de l'animation de la couche CAL et de la rotation simultanée de l'appareil. J'ai donc arrêté l'animation en faisant pivoter l'appareil.

Cherchez le code 

[CATransaction begin]

//foo
[CATransaction commit]

Assurez-vous que l'animation à l'intérieur de ce code ne chevauche pas vos autres animations sur le fil principal.

11
Harsh

Cela peut apparaître dans les journaux si vous utilisez UIWindow.rootViewController pour ignorer complètement les storyboards.

Pour abandonner le message de journal, vous pouvez supprimer le storyboard, supprimez la clé associant le storyboard à votre application dans info.plist, définissez LaunchScreen.storyboard comme Main Interface dans la cible, puis utilisez

window = UIApplication.shared.keyWindow!

inside AppDelegate pour obtenir la window principale et y affecter votre UIViewController.

0
Fabian