应用程序不会以模态方式呈现,但崩溃与`应用程序试图以模态方式呈现活动控制器`

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了应用程序不会以模态方式呈现,但崩溃与`应用程序试图以模态方式呈现活动控制器`相关的知识,希望对你有一定的参考价值。

我已经看了好几天了,我无法弄清楚发生了什么。

我有这个崩溃每天影响2%的用户(跨越iPad和iPhone,不仅限于ios 12,底部是完整的堆栈跟踪):Application tried to present modally an active controller <DownloadViewController: 0x10a0c3c00>.

在我的代码中没有任何地方我调用UIViewController presentViewController:animated,并且没有模态segues到DownloadViewController。总有一个UINavigationController存在(它是故事板的初始VC)。

我尝试模拟两次执行segues的竞争条件,或者在其下面的UIAlertController消失之后显示UIViewController并且它尝试对活动VC执行segue但是我无法重现此崩溃:我能够导致的最多是DownloadViewController被推到UINavigationController两次(不是世界末日,没有崩溃)。

在我添加了一些UIAlertControllers后,这个崩溃开始发生,所以我假设它们与它有关,但我无法弄清楚如何。

任何想法下一步去哪里?


Fatal Exception: NSInvalidArgumentException
0  CoreFoundation                 0x2201b0518 __exceptionPreprocess
1  libobjc.A.dylib                0x21f38b9f8 objc_exception_throw
2  UIKitCore                      0x24c01859c -[UIViewController _presentViewController:withAnimationController:completion:]
3  UIKitCore                      0x24c01aa7c __63-[UIViewController _presentViewController:animated:completion:]_block_invoke
4  UIKitCore                      0x24c033570 -[_UIViewControllerTransitionCoordinator _applyBlocks:releaseBlocks:]
5  UIKitCore                      0x24c02f930 -[_UIViewControllerTransitionContext _runAlongsideCompletions]
6  UIKitCore                      0x24c02f608 -[_UIViewControllerTransitionContext completeTransition:]
7  UIKitCore                      0x24ca2ba00 -[UIViewAnimationBlockDelegate _didEndBlockAnimation:finished:context:]
8  UIKitCore                      0x24ca02758 -[UIViewAnimationState sendDelegateAnimationDidStop:finished:]
9  UIKitCore                      0x24ca02d2c -[UIViewAnimationState animationDidStop:finished:]
10 UIKitCore                      0x24ca02dcc -[UIViewAnimationState animationDidStop:finished:]
11 QuartzCore                     0x22464f958 CA::Layer::run_animation_callbacks(void*)
12 libdispatch.dylib              0x21fbf17d4 _dispatch_client_callout
13 libdispatch.dylib              0x21fb9f004 _dispatch_main_queue_callback_4CF$VARIANT$mp
14 CoreFoundation                 0x220141ec0 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
15 CoreFoundation                 0x22013cdf8 __CFRunLoopRun
16 CoreFoundation                 0x22013c354 CFRunLoopRunSpecific
17 GraphicsServices               0x22233c79c GSEventRunModal
18 UIKitCore                      0x24c5afb68 UIApplicationMain
19 WeDownload                     0x100ea1f40 main (main.m:14)
20 libdyld.dylib                  0x21fc028e0 start
答案

解决了它。问题是在这样的块内:

[UIView transitionWithView:self.view duration:0.2 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{

...我有效地连续两次调用[self presentViewController:alert animated:YES completion:nil];(警报是UIAlertController)。

最重要的学习:在错误消息Application tried to present modally an active controller <DownloadViewController: 0x10a0c3c00>中,DownloadViewController是演示者而不是呈现的东西。如果我能正确理解错误信息的话,我会早点想出这个。

以上是关于应用程序不会以模态方式呈现,但崩溃与`应用程序试图以模态方式呈现活动控制器`的主要内容,如果未能解决你的问题,请参考以下文章

错误 - 目标 C - '应用程序试图以模态方式呈现活动控制器 <splitViewDetailViewController:'

应用程序在模态显示视图控制器时崩溃

应用程序试图以模态方式呈现一个活动控制器 ios

呈现模态视图控制器时 iPhone 崩溃

使用 UIAlertController 在 UIImagePicker 中“应用程序试图以模态方式呈现活动控制器”

在 iOS 10 中以模态方式呈现新 VC 时崩溃