Сбой приложения в 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>)

Другие вопросы по тегам