web-dev-qa-db-ja.com

+ [CATransaction synchronize]トランザクション内で呼び出されました

サービスからデータを読み込んでいる間にiPadアプリを閉じると、アプリは閉じますが、何もせずにすぐに再び開きます。この時点では、私は何もできません。アプリを閉じることができず、アプリやデバイスを操作できません。デバイスを再び使用する唯一の方法は、デバイスを再起動することです。アプリはクラッシュせず、デバイスを無効にするだけです。

これが発生すると、次の行がapplicationWillResignActiveおよびapplicationDidEnterBackground:の直後にコンソールに3回表示されます。

+[CATransaction synchronize] called within transaction

アプリがクラッシュしても大丈夫ですが、デバイスが完全に役に立たなくなっているという事実は大きな問題です。このバグをインターセプトしたり、CATransactionでこの問題が発生したことを何らかの方法で検出したりできる場合は、問題ありません。

何か案は?

32
Confused

これは、メインスレッドで複数のアニメーションが実行されているときに発生します。私も同じ問題に直面しました。私の場合、CALayerのアニメーションとデバイスの回転を同時に実行すると、アプリケーションがフリーズします。そのため、デバイスを回転させている間、アニメーションを停止しました。

コードを探す

[CATransaction begin]

//foo
[CATransaction commit]

このコード内のアニメーションがメインスレッドの他のアニメーションと重複しないことを確認してください。

12
Harsh

これは、UIWindow.rootViewControllerを使用してストーリーボードを完全にスキップすると、ログに表示される可能性があります。

ログメッセージを破棄するには、ストーリーボードを削除し、ストーリーボードをアプリに関連付けるキーをinfo.plistで削除し、ターゲットでLaunchScreen.storyboardMain Interfaceとして設定して使用します。

window = UIApplication.shared.keyWindow!

メインのAppDelegateを取得してwindowを割り当てるには、UIViewControllerの内部.

0
Fabian