TL; DR您只能有1个rootViewController,而它是最新提供的一个。因此,当已经呈现了一个尚未被关闭的视图控制器时,不要尝试让它出现。
经过一些我自己的测试,我得出了一个结论。
如果您有要显示所有内容的rootViewController,则可能会遇到此问题。
这是我的rootController代码(open是从根目录显示Viewcontroller的快捷方式)。
func open(controller:UIViewController)
{
if (Context.ROOTWINDOW.rootViewController == nil)
{
Context.ROOTWINDOW.rootViewController = ROOT_VIEW_CONTROLLER
Context.ROOTWINDOW.makeKeyAndVisible()
}
ROOT_VIEW_CONTROLLER.presentViewController(controller, animated: true, completion: {})
}
如果我连续两次打出公开赛(无论经过了多长时间),则在第一次公开赛中就可以正常工作,但在第二次公开赛中就不能正常工作。第二次打开尝试将导致上面的错误。
但是,如果我关闭了最近显示的视图然后调用open,那么当我再次调用open(在另一个viewcontroller上)时,它就可以正常工作。
func close(controller:UIViewController)
{
ROOT_VIEW_CONTROLLER.dismissViewControllerAnimated(true, completion: nil)
}
我得出的结论是,只有MOST-RECENT-CALL的rootViewController在视图层次结构上(即使您没有关闭它或删除视图)。我尝试使用所有加载程序调用(viewDidLoad,viewDidAppear和进行延迟的分派调用),但我发现使它起作用的唯一方法是仅从最顶层的视图控制器调用present。
presentViewController:animated:completion
导航控制器外,我遇到了完全相同的问题。您是在应用程序委托中执行此操作吗?