+[CATransactionsync] вызывается внутри транзакции

Если я закрою приложение для iPad во время загрузки данных из служб, приложение закроется, но затем сразу же снова откроется, и я ничего не сделаю. На данный момент я ничего не могу сделать; Я не могу закрыть приложение и не могу взаимодействовать с приложением или устройством. Единственный способ снова использовать устройство — перезапустить его. Приложение не вылетает, оно просто отключает устройство.

Когда это происходит, в консоли три раза появляется следующая строка сразу после applicationWillResignActive и applicationDidEnterBackground:

+[CATransaction synchronize] called within transaction

Ничего страшного, если приложение выйдет из строя, но тот факт, что устройство становится полностью бесполезным, является огромной проблемой. Если бы я мог перехватить эту ошибку или как-то определить, когда CATransaction поднимает эту проблему, то это было бы прекрасно.

Любые идеи?


person Confused    schedule 25.08.2011    source источник
comment
вы нашли решение своей проблемы?   -  person matm    schedule 02.02.2012
comment
у меня такая же проблема, вы нашли причину?   -  person nullmicgo    schedule 06.05.2013
comment
Вы нашли какой-нибудь ответ? Кажется, я не могу найти ничего в сети, и все мои настройки и попытки терпят неудачу. эта [синхронизация CATransaction] все еще блокирует мой основной поток.   -  person NFerocious    schedule 18.02.2015


Ответы (2)


Это происходит, когда в основном потоке выполняется более одной анимации. Я столкнулся с той же проблемой. В моем случае приложение зависает при одновременной анимации CALayer и вращении устройства. Поэтому я остановил анимацию при вращении устройства.

Ищите код

[CATransaction begin]

//foo
[CATransaction commit]

Убедитесь, что анимация внутри этого кода не перекрывается с другими вашими анимациями в основном потоке.

person Harsh    schedule 25.04.2012
comment
это означает, что я должен делать это во всех commitAnimation? [CATransaction начало]; [Анимации фиксации UIView]; [CATransaction фиксирует]; - person nullmicgo; 06.05.2013
comment
Истинный. Я использовал CATransaction.begin в DispatchQueue.main.async. момент, когда я удалил CoreAnimation из DispatchQueue.main.async. Предупреждение сработало. - person Yash Bedi; 05.06.2019

Это может отображаться в журналах, если вы используете UIWindow.rootViewController для полного пропуска раскадровки.

Чтобы удалить сообщение журнала, вы можете удалить раскадровку, удалить ключ, связывающий раскадровку с вашим приложением в info.plist, установить LaunchScreen.storyboard как Main Interface в цели и использовать

window = UIApplication.shared.keyWindow!

внутри AppDelegate, чтобы получить основной window и назначить на него свой UIViewController.

person Fabian    schedule 06.09.2018