Сбой приложения в runTransitionForCurrentState, но не знаю, почему
Я пытался найти это, но безуспешно, поэтому надеюсь, что найдутся гуру, которые могут знать ответ.
Я вижу множество отчетов в iTunes Connect о сбое моего приложения с определенной трассировкой стека, но трассировка стека ничего полезного не обнаруживает.
#0. Crashed: main
0 UIKit 0x1871100c0 __56-[UIPresentationController runTransitionForCurrentState]_block_invoke + 324
1 UIKit 0x1871100bc __56-[UIPresentationController runTransitionForCurrentState]_block_invoke + 320
2 UIKit 0x1870630c8 _runAfterCACommitDeferredBlocks + 292
3 UIKit 0x187070a80 _cleanUpAfterCAFlushAndRunDeferredBlocks + 92
4 UIKit 0x186da25a4 _afterCACommitHandler + 96
5 CoreFoundation 0x181c0c728 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32
6 CoreFoundation 0x181c0a4cc __CFRunLoopDoObservers + 372
7 CoreFoundation 0x181c0a8fc __CFRunLoopRun + 928
8 CoreFoundation 0x181b34c50 CFRunLoopRunSpecific + 384
9 GraphicsServices 0x18341c088 GSEventRunModal + 180
10 UIKit 0x186e1a088 UIApplicationMain + 204
11 MyApp 0x100082e6c main (main.m:19)
12 libdyld.dylib 0x1816d28b8 start + 4
В iOS 9.1, 9.2, 9.3-10 и на различных iPhone и iPad нет шаблонов, и нет подсказок, которые могли бы помочь воспроизвести его.
Кто-нибудь испытывал что-то подобное раньше и имел некоторое понимание / подозрение, что может вызвать это?
1 ответ
У меня точно такой же сбой, и я выяснил причину. Очень уменьшенная версия моего кода выглядит примерно так
[self dismissViewControllerAnimated:YES completion:nil];
// call a method that ends up doing
[appRootViewController dismissViewControllerAnimated:NO completion:nil];
self
в приведенном выше фрагменте представлен контроллер представления, который был представлен модально поверх корня. Сам контроллер представления также представил модально поверх текущего контекста некоторый другой контроллер. Поэтому я пытаюсь отменить этот контроллер текущего контекста с анимацией, а затем вызывать другой код, который в конечном итоге удаляет любой представленный контроллер представления из корня без анимации.
Или, другими словами, контроллер представления, предоставляющий текущий контекст для анимированного увольнения, который я только что начал, удаляется из иерархии представления, пока происходит предыдущее анимированное увольнение.
При воспроизведении этого в XCode это также регистрирует следующее к консоли:
transitionViewForCurrentTransition не установлен, контроллер презентации был отклонен во время презентации? (<_UIOverCurrentContextPresentationController: 0x7faf277d9c30>)