Я считаю, что я воспроизвел ту же ошибку в iOS 4. В моем приложении сбой происходил постоянно при попытке показать второй модальный вид сразу после показа первого модального вида. Я несколько часов боролся с ума.
После прочтения сообщений в этой теме я попытался создать простой воспроизводимый пример, используя шаблон приложения панели вкладок. Я смог использовать UIImagePickerController, чтобы показать первый модальный вид после ответа на нажатие кнопки в «FirstViewController.m». Когда я снова попытался показать UIImagePickerController (после обработки сообщения imagePickerControllerDidCancel), приложение завершилось с той же ошибкой.
На устройстве просто не было понятия, что происходит. Однако, когда я запустил код на симуляторе, мне повезло получить это сообщение на консоли:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Attempting to begin a modal transition from to while a transition is already in progress. Wait for viewDidAppear/viewDidDisappear to know the current transition has completed'
Так что, похоже, мой единственный выбор - следовать совету сообщения об ошибке и просто подождать, пока viewDidAppear (используя флаг, чтобы указать, что я нахожусь в этом специальном режиме), а затем загрузить второе модальное представление.
Вот полная трассировка стека для полноты:
** Call stack at first throw:
(
0 CoreFoundation 0x0238c919 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x024da5de objc_exception_throw + 47
2 CoreFoundation 0x02345078 +[NSException raise:format:arguments:] + 136
3 Foundation 0x000ab8cf -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 116
4 UIKit 0x00544317 -[UIWindowController transition:fromViewController:toViewController:target:didEndSelector:] + 212
5 UIKit 0x0035c769 -[UIViewController presentModalViewController:withTransition:] + 2937
6 TestTempDelete 0x000021cf -[FirstViewController showImagePicker] + 167
7 Foundation 0x0002fcea __NSFireDelayedPerform + 441
8 CoreFoundation 0x0236dd43 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19
9 CoreFoundation 0x0236f384 __CFRunLoopDoTimer + 1364
10 CoreFoundation 0x022cbd09 __CFRunLoopRun + 1817
11 CoreFoundation 0x022cb280 CFRunLoopRunSpecific + 208
12 CoreFoundation 0x022cb1a1 CFRunLoopRunInMode + 97
13 GraphicsServices 0x02bf12c8 GSEventRunModal + 217
14 GraphicsServices 0x02bf138d GSEventRun + 115
15 UIKit 0x002beb58 UIApplicationMain + 1160
16 TestTempDelete 0x00001eb4 main + 102
17 TestTempDelete 0x00001e45 start + 53
Надеюсь, это поможет.